单链表逆序(递归&非递归)
2012-03-25 13:54
295 查看
结点定义:
struct Node { int data; Node *next; };
方法一:
设置两个临时指针pre和ne分别标记当前指针的前驱和后继,将当前结点的next指针指向前驱,然后把前驱指针和当前指针往后移动,继续遍历,当然每次移动后都要重新标记当前结点的后继结点,代码如下:void reverse(list *&head) { if(list == NULL) { return ; } else { list *pre = head; list *cur = head->next; list *ne; while(cur != NULL) { ne = cur->next; cur->next = pre; pre = cur; cur = next; } head->next = NULL; head = pre; } }
方法二:
采用递归的方式,如果要将当前结点逆序,那么先将它的后继结点都逆序,然后把逆序后的尾结点的next指向当前结点即可,要注意的是递归出口,我们选择链表为空或者只有一个结点的情况为递归出口,代码如下:list *reverse(list *p, list *&head) { if(p == NULL || p->next == NULL) { head = p; return p; } else { list *temp = reverse(p->next, head); temp->next = p; return p; } }
单链表的逆序基本上就是以上两种思想,当然写法可以有很多,根据自己的理解能将其实现就行了。
相关文章推荐
- 单链表逆序(递归&非递归)
- 链表面试题--两种方法逆序打印单链表(栈和递归)
- 程序员面试100题(算法)之递归逆序打印单链表、字符串(同时求字符串长度)
- 算法设计和数据结构学习_(单链表的递归逆序)
- 单链表的递归逆序
- 总结: 求逆序对 递归分治(与poj 22…
- 算法设计和数据结构学习_8(单链表的递归逆序)
- 图的深度优先搜索遍历(邻接表&邻接矩阵,递归&非递归)(C++)
- 单链表(创建<14种功能>,逆序,合并)
- 用递归逆序一个单链表
- 算法设计和数据结构学习_6(单链表的递归逆序)
- 算法设计和数据结构学习_6(单链表的递归逆序)
- 剑指offer:二叉树的深度(递归&&非递归)(java)
- 删除不带头结点的单链表的非尾结点&&逆序打印单链表
- 单链表逆序———不借助外部辅助空间递归与非递归实现
- 链表逆序(递归&非递归)/倒序输出链表值/用一个递增序列构建平衡二叉搜索树/用递归的方法判断数组是不是升(降)序排列
- 递归逆序打印单链表(c实现)
- 在VS和Linux下逆序打印单链表(递归和非递归)
- LeetCode 24 Swap Nodes in Pairs (链表 递归&&非递归)
- 【Leetcode】144. Binary Tree Preorder Traversal 【Tree】【递归&&非递归】