链表的转向是常考的内容,方法也很多。
今天在网上看到一个最直观易懂的,摘录下来供大家参考下。
转自: http://blog.csdn.net/feliciafay/article/details/6841115
方法:使用3个指针遍历单链表,逐个链接点进行反转。
步骤:使用p和q两个指针配合工作,使得两个节点间的指向反向,同时用r记录剩下的链表。
p = head;
q = head->next;
head->next = NULL;
现在进入循环体,这是第一次循环。
r = q->next;
q->next = p;
p = q;
q =r;
第二次循环。
r = q->next
q->next = p;
p = q;
q = r
第三次循环。。。。。
代码如下:
ActList* ReverseList2(ActList* head) { //ActList* temp=new ActList; if(NULL==head|| NULL==head->next) return head; //少于两个节点没有反转的必要。 ActList* p; ActList* q; ActList* r; p = head; q = head->next; head->next = NULL; //旧的头指针是新的尾指针,next需要指向NULL while(q){ r = q->next; //先保留下一个step要处理的指针 q->next = p; //然后p q交替工作进行反向 p = q; q = r; } head=p; // 最后q必然指向NULL,所以返回了p作为新的头指针 return head; }
相关推荐
二叉树转换为双向链表 通过随机创建二叉排序树测试二叉树转换为双向链表是否正确 http://blog.csdn.net/ssuchange/article/details/17383625
1. 双指针迭代翻转链表 翻转链表和交换两个变量的操作大同小异。 首先需要一个prev指针(指着当前节点的前一个节点),一个cur指针(指着当前节点) 翻转链表需要注意的一点是:链表之间靠指针连接,如果贸然将某个...
//表示 k 个节点后,下一个即将翻转链表的头结点//表示后续无可翻转链表//记录下一个即将翻转链表的头结点//翻转当前 k 个节点链表ListNode* ne
本代码,实现了基本的链表结构,同时完成了链表的翻转操作。链表的翻转是IT程序员面试时的常见问题,对找工作的同学,进一步了解链表的性能,有很大的帮助。
链表 代码 链表 代码 链表 代码 链表 代码 链表 代码 链表 代码 链表 代码 链表 代码 链表 代码 链表 代码 链表 代码
61. 旋转链表给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。先让链表屁股指向头(成环),然后用长度减右移的步数,就是左移的步
C完整链表C完整链表C完整链表C完整链表C完整链表C完整链表C完整链表
这个是某公司的一道题,是把二叉查找树 转为双向链表的,我用程序实现了。希望对你有帮助!
go语言通过数组和链表的方式实现队列 数组和链表.pdf
C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表
双向链表
jackson,将对象或链表转化为json字符串的开源工具包
通过本程序可以进行链表的学习,对城市信息进行管理
详细解读了HashMap中链表转红黑树的treefyBin方法,该方法中涉及到的诸如:replacementTreeNode方法、treeify方法、comparableClassFor方法、compareComparables方法、tieBreakOrder方法、balanceInsertion方法、...
主要介绍了Python 数据结构之旋转链表的相关资料,需要的朋友可以参考下
用C语言链表实现进程转换,阻塞变就绪,就绪变执行,执行变阻塞三种状态的转换
http://msdn.microsoft.com/en-us/library/95z04bas(v=VS.71).aspx 双向链表
js代码-数组转链表,链表转数组
设计算法以判断一个带头结点的单循环链表是否满足...若成立,返回TRUE,否则返回FALSE,任务利用递增有序地单循环链表表示集合,分别求两个链表表示的集合的交、并集所构成的链表,设计算法以构造带头结点的双循环链表。
该代码是关于链表的基本两项操作:翻转、排序,用C++语言编写,对初学链表的朋友有一定的帮助。