单向链表的反转
来源:互联网 发布:日本缺java 编辑:程序博客网 时间:2024/06/08 07:03
struct node{int a;node *next;};void reverse1(node *head){node *p = head, *r = head, *q;while (p){q = p->next;p->next = head;head = p;p = q;}r->next = NULL;}void reverse2(node *head){node *p = head, *r = NULL, *q = NULL;while(p){r = q;q = p;p = p->next;q->next = r;}head = q;}
方法三(递归):
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;// 返回当前节点
}
这个方法是采用了递归算法,也就是在反转当前节点之前先反转其后继节点,说白了其实就是利用函数的调用堆栈构建了一个临时链表罢了,挺废的一个算法,权当作是写着好玩,没有什么实在的意义。
采用此算法需要注意的是,头结点必须要传入的是引用,因为在递归跳出的时候要切断链表,否则链表将会形成一个回环。
- 单向链表的反转
- 单向链表的反转
- 单向链表的反转
- 单向链表的反转
- 单向链表的反转
- 单向链表的反转
- 单向链表的反转
- 单向链表反转
- 反转单向链表
- 单向链表反转
- 单向链表反转
- 单向链表反转
- 反转单向链表
- 反转单向链表
- 反转单向链表
- 反转单向链表
- 单向链表反转
- 单向链表反转
- 怎样获取系统时间
- Dojo1.6新特性概览
- 西安电子科技大学计算机机试题目 PROBLEM A
- ant的一些偏门技巧
- #if 0 /#if 1作用与用法
- 单向链表的反转
- F#与数学(II) – 在图形算法中使用矩阵(PartI)
- 获取java文件所在的路径
- Maven入门--概念与实例
- 【Android Training - Performance】提高显示布局文件的性能[Lesson 1 - 优化布局层级]
- TextView显示html图片的方法
- iptables配置
- Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’的解决办法
- winhand.cpp 报错, CDC