单链表逆序(递归&非递归)
来源:互联网 发布:淘宝客鹊桥怎么做 编辑:程序博客网 时间:2024/05/23 18:42
结点定义:
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;}}
单链表的逆序基本上就是以上两种思想,当然写法可以有很多,根据自己的理解能将其实现就行了。
- 单链表逆序(递归&非递归)
- 单链表逆序(递归&非递归)
- 字符串逆序(递归非递归实现)
- 单链表逆序的递归与非递归算法
- 单链表逆序的递归与非递归算法
- 单链表的逆序实现,递归和非递归算法
- 逆序单链表的递归和非递归实现
- 单链表逆序的递归与非递归算法
- 在VS和Linux下逆序打印单链表(递归和非递归)
- 单链表反转(递归和非递归)
- 单链表的合并(递归、非递归)
- 单链表反转(递归和非递归)
- 单链表反转(递归和非递归)
- 单链表反转(递归和非递归)
- C++单链表递归逆序
- 单链表的设计和非递归,递归逆序方法源代码,dev-c++下可直接运行.
- 程序员面试宝典之数据结构基础---⑤单链表逆序的递归与非递归实现
- 给定的单链表逆序操作的递归与非递归算法总结
- 今天特地去netcraft web server survey查了一下
- JVM读书笔记二 类的生命周期
- Ubuntu 10.04下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- CGAL::Polyhedron_3<Traits>
- 关于android创建快捷方式会启动两个应用的问题
- 单链表逆序(递归&非递归)
- C#根据文字获取拼音、首字字母
- hibernate工作流程的一些总结
- 二分图匈牙利算法
- xml,json,html格式化工具
- 关于方法重写和方法重载的总结
- /host/android-ndk-r7/mytoolchain/bin/../sysroot/usr/include/crypt.h:69: error: expected ',' or ';' b
- Openssl Des-3
- 动态链接库生成及调用