剑指Offer16翻转链表
来源:互联网 发布:9.9元淘宝斜挎包女包 编辑:程序博客网 时间:2024/06/03 08:00
题目:
定义一个函数,输入一个链表的头结点,翻转该链表并输出翻转后链表的头结点。
分析:
这个题刚看的时候可能会和之前遇到的逆序输出链表差不多,不过在那个题目中并没有改变链表的指针,而是通过增加空间来进行逆序输出的,还记得怎么做吗?当然就是增加一个n长度的栈。当然如果题目要求中是可以改变链表的,并且只允许增加常数的空间,那么就和这个题目是一样的解决方法了。
那看这个题怎么解吧!
用这个图来说明,如果我们把3之前的结点都进行了翻转,并且3也把指针指向了前面的结点的话,那么,此时4结点就会找不到了,所以我们需要一个指针指向保存4结点,我们还需要一个指针来指向3前面的一个结点2,这样,我们总共需要3个指针就可以完成逆序了。分别指向当前结点和前后两个结点。
过程:
首先一个指针保存当前结点的后结点,当然如果后结点为空的话,我们就相当于找到了翻转之后的头结点(也就是此时链表的尾结点)。然后将当前结点的next指针指向当前结点的前结点,接下来就要往前移动了,下面包含两步(1,前结点就要指向当前结点了。2,当前结点指向下一个结点)。
过程挺简单,代码中也有优化,下面看代码:
ListNode * ReverseList(ListNode * HeadList){ ListNode * pReverseHead = NULL; ListNode * pNode = HeadList; ListNode * pVer = NULL; while(pNode != NULL) { ListNode * pNext = pNode->m_pNext; if(pNext == NULL) pReverseHead = pNode; pNode->m_pNext = pVer; pVer = pNode; pNode = pNext; } return pReverseHead;}
0 0
- 剑指Offer16翻转链表
- 剑指offer16--反转链表
- 剑指Offer16:反转链表
- 【面试题】剑指offer16--反转链表
- 剑指offer16--二叉树的镜像处理
- 剑指offer---翻转链表
- 剑指offer 翻转链表
- 无情链表的创建,,翻转翻转
- 【剑指offer】Q16:翻转链表
- 剑指Offer-16-翻转链表
- LintCode-剑指Offer-翻转链表
- 链表翻转程序
- 链表翻转
- 链表翻转
- 链表翻转
- 翻转单向链表
- 翻转链表
- 原地翻转链表
- 博客搬家lijiancai.cn
- 请教如何统计快速排序里元素的比较次数和交换次数
- Intel Galileo笔记(六)Linux Yocto的研究
- android内核打印
- poj 2501 Average Speed
- 剑指Offer16翻转链表
- 客户端JavaScript(一)
- 坑b的暑期大作业
- 检测系统信息
- 使用fpm创建自己的RPM
- 杭电1267 下沙的沙子有几粒?
- Spiral Matrix
- ScrollView 使用方法
- Windows 驱动入门(一)