已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
来源:互联网 发布:seo什么职位 编辑:程序博客网 时间:2024/05/20 23:06
我们假设单向链表的节点如下:
template <typename T>
class list_node
{
public:
list_node * next;
T data;
};
class list_node
{
public:
list_node * next;
T data;
};
这个题目算是考察数据结构的最基础的题目了,有两种方法可以解此题:
方法一:
void reverse(node*& head)
{
if ( (head == 0) || (head->next == 0) ) return;// 边界检测
node* pNext = 0;
node* pPrev = head;// 保存链表头节点
node* pCur = head->next;// 获取当前节点
while (pCur != 0)
{
pNext = pCur->next;// 将下一个节点保存下来
pCur->next = pPrev;// 将当前节点的下一节点置为前节点
pPrev = pCur;// 将当前节点保存为前一节点
pCur = pNext;// 将当前节点置为下一节点
}
}
{
if ( (head == 0) || (head->next == 0) ) return;// 边界检测
node* pNext = 0;
node* pPrev = head;// 保存链表头节点
node* pCur = head->next;// 获取当前节点
while (pCur != 0)
{
pNext = pCur->next;// 将下一个节点保存下来
pCur->next = pPrev;// 将当前节点的下一节点置为前节点
pPrev = pCur;// 将当前节点保存为前一节点
pCur = pNext;// 将当前节点置为下一节点
}
}
这是一般的方法,总之就是用了几个临时变量,然后遍历整个链表,将当前节点的下一节点置为前节点。
注释:
链表反转最好画个图,光看代码对于新新手来说,确实是一个迷糊。
链表正常的顺序是前一个节点的NEXT指向后一个节点。反转就是要将后一个节点的next指向前一个节点,
所以pCur->next = pprev; 完成了这一个功能。但这只是完成了两个节点的反转,所以对应的要将当前
节点的next保存下来pNext = pcur->next;,用来当作下一次的当前节点PCur = Pnext;在下一次反转中,当前节点
就变成了下一次反转中的前节点。pPrev = pCur;
一直到当前节点为NULL,也就是全部转化为止;
方法二:
node* reverse( node* pNode, node*& head)
{
if ( (pNode == 0) || (pNode->next == 0) ) // 递归跳出条件
{
head = pNode; // 将链表切断,否则会形成回环
return pNode;
}
node* temp = reserve(pNode->next, head);// 递归
temp->next = pNode;// 将下一节点置为当前节点,既前置节点
return pNode;// 返回当前节点
}
{
if ( (pNode == 0) || (pNode->next == 0) ) // 递归跳出条件
{
head = pNode; // 将链表切断,否则会形成回环
return pNode;
}
node* temp = reserve(pNode->next, head);// 递归
temp->next = pNode;// 将下一节点置为当前节点,既前置节点
return pNode;// 返回当前节点
}
0 0
- 已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
- 已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
- 已知链表的头结点head,写一个函数把这个链表逆序
- 已知链表的头结点head,写一个函数把这个链表逆序
- C/C++ | 26-17 已知一个单向链表的头,删除其某一个结点的算法
- 逆序带头结点的单向链表
- 有头结点的单向链表
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点
- 13\给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,
- 单向链表指针头结点的修改
- (学习java)带有头结点的单向循环链表
- 初学单向链表中的头结点与头指针
- 输出一个单向链表中间的结点
- 输出一个单向链表中间的结点
- 将一个单向链表逆序
- 将一个单向链表逆序
- 对一个单向链表进行逆序
- 推荐系统学习之评测指标
- Centos6.5 yum安装 MySQL6.5+
- 编译器警告(等级 3)C4996
- 【CentOS 7学习】_ 安装Java开发环境
- HDU 2841:Visible Trees (容斥原理)
- 已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
- Linux下的c基础编程——按原顺序插入元素
- MFC显示Mat数据格式(Opencv)图片,保证4字节对齐,图片缩放不错行
- nginx数据结构(ngx_array_t)
- 线程安全(MT-safe)的多线程并发服务器程序实例
- docker部署spark集群
- TCP/IP概念
- hadoop源码编译
- 对java数据结构的实现