第二章:线性表 课后习题整理 数据结构与算法 --张铭
2018-04-03 21:33
621 查看
1.试设计一个非递归算法在O(n)时间内将一个含有n个元素的单链表逆置(C++)请问如何构建一个单链表,要求其辅助空间为常量。
方法一:头插法重新建表(头插法:将头结点摘下,然后从第一个节点开始,依次插入到头结点的后面,直到最后一个结点为止。LinkList Reverse(LinkList L){
//L是带头结点的单链表,本算法将L就地逆置
LNode *p ,*r; //p为工作指针,r为p的后继,以防断链
p = L->next; //从第一个元素结点开始
L->next = NULL; //先将头结点L的next域置为NULL
while(p != NULL){ //依次将元素结点摘下
r = p->next; //暂存p的后继
p->next = L->next; //将p结点插入到头结点之后
L->next = p; //
p = r; //
}
return L;
}其他解法请自行google
2.给定一个单向链表,试设计一个既省时间又节省空间的算法来找出该该链表的倒数第m个元素。
经典题目:两个指针,一前一后。时间复杂度O(n),空间复杂度O(1)LNode* FindMToLastNode(LNode* pHead, int m)
{
// 查找到第m个元素
LNode* pCurrent = pHead;
for (int i = 0; i < m; ++i)
{
if (pCurrent)
{
pCurrent = pCurrent->next;
}
else
{
return NULL;
}
}
// 一起继续遍历到链表尾部,
// 现在pFind和pCurrent之间间隔了m个元素,
// 所以,当pCurrent遍历到尾部的时候,
// pFind就到了倒数第m个元素的位置上.
LNode* pFind = pHead;
while (pCurrent)
{
pFind = pFind->next;
// 间隔m个元素
pCurrent = pCurrent->next;
}
return pFind;
}
方法一:头插法重新建表(头插法:将头结点摘下,然后从第一个节点开始,依次插入到头结点的后面,直到最后一个结点为止。LinkList Reverse(LinkList L){
//L是带头结点的单链表,本算法将L就地逆置
LNode *p ,*r; //p为工作指针,r为p的后继,以防断链
p = L->next; //从第一个元素结点开始
L->next = NULL; //先将头结点L的next域置为NULL
while(p != NULL){ //依次将元素结点摘下
r = p->next; //暂存p的后继
p->next = L->next; //将p结点插入到头结点之后
L->next = p; //
p = r; //
}
return L;
}其他解法请自行google
2.给定一个单向链表,试设计一个既省时间又节省空间的算法来找出该该链表的倒数第m个元素。
经典题目:两个指针,一前一后。时间复杂度O(n),空间复杂度O(1)LNode* FindMToLastNode(LNode* pHead, int m)
{
// 查找到第m个元素
LNode* pCurrent = pHead;
for (int i = 0; i < m; ++i)
{
if (pCurrent)
{
pCurrent = pCurrent->next;
}
else
{
return NULL;
}
}
// 一起继续遍历到链表尾部,
// 现在pFind和pCurrent之间间隔了m个元素,
// 所以,当pCurrent遍历到尾部的时候,
// pFind就到了倒数第m个元素的位置上.
LNode* pFind = pHead;
while (pCurrent)
{
pFind = pFind->next;
// 间隔m个元素
pCurrent = pCurrent->next;
}
return pFind;
}
相关文章推荐
- 第一章:课后习题整理 数据结构与算法 --张铭
- 数据结构第二章线性表---课后习题
- 算法导论第二章课后习题代码实现
- 2、数据结构习题——第二章 线性表
- C++ Primer Plus 课后习题 第二章
- 算法导论课后习题解析 第二章
- 算法导论课后习题第二章(2)
- 第二章 习题2.1-3 查找线性表
- 关于《C++程序设计教程》(第二版)钱能著 第二章课后习题第5题的解答程序
- java语言程序设计基础课后习题第二章
- 计算机网络教程第二章物理层课后习题答案
- 第二章 课后习题
- 《C语言程序设计教程》(主编黄迪明、余勤)第二章课后习题答案
- 第二章 习题2.1-3 查找线性表
- 数据挖掘概念与技术(原书第三版)范明 孟小峰译-----第二章课后习题答案
- 谭浩强C语言程序设计课后习题解答(第二章)
- 数据结构习题——第二章 线性表
- 第二章 习题2.1-3 查找线性表
- 《C++ Primer》第五版课后习题解答_第二章(1)(01-08)
- 第二章课后习题