(面试题)链表反序算法,教你10秒记住
来源:互联网 发布:武汉大学图书馆数据库 编辑:程序博客网 时间:2024/06/06 07:04
链表逆序经常是面试中常见的一个题目,很多人觉得不好记,下面我教大家两种比较好记的解法。
解法一:迭代解法
void reverse(Node* pNode){// 判断头和头next不为空,必须有两个以上的结点才能反序if (NULL == pNode || NULL == pNode->next){return;}// 三个指针 分别指向链表的前三个结点(注意:如果链表只有两个结点也是可以的)Node* p1 = pNode;Node* p2 = pNode->next;Node* p3 = p2->next;// 头部变尾部 指向NULLp1->next = NULL;// 判断的是最后一个while(p3){// 每次只反序中间p2->next = p1;// 前、中、后每个向后移动一个单位p1 = p2;p2 = p3;p3 = p3->next;}// 循环结束 再反序中间p2->next = p1;// 最后将中间返回pNode = p2;}
1. 链表判断是否有两个以上结点(必须条件)
2. 定义三指针分别指向前三个
3. 头指向null
4. 循环判断如果第三个不为空,则执行以下两步,第一步、反序中间、第二步、三指针从p1开始顺序往后移动一个单位
5. 最后再反序中间一次,然后将中间返回
或者记住以下关键字
三个指针、循环判断的是第三个、顺序移动三个指针、只反序中间
按照这种思路,应该很快就可以记住了
解法二:利用栈(对于实在记不住第一个解法的同学)
定义一个栈、因为栈有先进后出的特点,所以只要按照顺序入栈再出栈,链表就可以反序了
解法三:递归解法
Node * ReverseList(Node *node){ if (!node || !node->next) { return node; } Node* p1 = node->next; Node* p2 = ReverseList(p1); p1->next = node; node->next = NULL; return p2;}
0 0
- (面试题)链表反序算法,教你10秒记住
- (面试题)教你10秒钟记住各种变量的定义
- 教你如何迅速秒杀掉:99%的海量数据处理面试题(JULY)
- 教你如何迅速秒杀99%的海量数据处理面试题(转)
- 教你如何迅速秒杀掉:99%的海量数据处理面试题(转自July)
- 教你如何迅速秒杀掉:99%的海量数据处理面试题 作者:July 出处:结构之法算法之道blog
- 教你如何迅速秒杀掉:99%的海量数据处理面试题 作者:July 出处:结构之法算法之道blog
- 面试题:整数反序
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题 .
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀99%的海量数据处理面试题
- 教你如何迅速秒杀掉:99%的海量数据处理面试题[转载]
- c++中的 extern "C"
- 27、Remove Element
- 笔记整理(java基础四-----面向对象---继承)
- unity3d点击按钮进行场景跳转的代码
- 如何申请使用百度PCS API来让文件上传到云端
- (面试题)链表反序算法,教你10秒记住
- win7+vs2008安装boost(1.57.0)
- SSDB 说明,安装使用
- mybatis <foreach>标签
- 共享软件大敌 简析十大破解工具
- 50、Pow(x, n)
- 断点续传
- spark和hive结合实践
- 笔记整理(java基础五-------面向对象--多态)