单链表反转-算法题0001
创始人
2024-03-31 17:57:57
0

笔记

  单链表反转最正规的解法是牛客网的官方解法的方法二。时间复杂度O(N),空间复杂度O(1)。第一遍读解法晕头转向,自己梳理了一遍,将重点用红字批注出来。

题想考察的是:如何调整链表指针,来达到反转链表的目的。
初始化:3个指针
1)pre指针指向已经反转好的链表的最后 一个节点,最开始没有反转 翻转后的链表还为空,所以指向nullptr
2)cur指针指向待反转链表的第一个 当前节点,最开始第一个节点待反转,所以指向head
3)nex指针指向待反转链表的第二个 下一个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存
接下来,循环执行以下三个操作
1)nex = cur->next, 保存作用
2)cur->next = pre 这一步实际上两个内容,其一是从待翻转链表首结点拆出一个元素,其二是将这个元素作为翻转后链表的头,和上一步已经翻转好的链表拼接起来。
3)pre = cur, 更新已经反转好的链表的首节点
4)cur = nex; 指针后移,操作下一个未反转链表的第一个节点
循环条件,当然是cur != nullptr
循环结束后,cur当然为nullptr,所以返回pre,即为反转后的头结点

/*** struct ListNode {*	int val;*	struct ListNode *next;* };*//*** * @param pHead ListNode类 * @return ListNode类*/
struct ListNode* ReverseList(struct ListNode* pHead ) {// write code hereif(pHead == NULL) return NULL;struct ListNode* Pre = NULL;//存新构建链表的首,这一步不好想struct ListNode* Cur = pHead;struct ListNode* Nex = NULL;// 把握一个主线就是 如何动态的构建翻转后的链表	while(Cur!=NULL){Nex=Cur->next;// A 移动指针指向下一个元素//{{完成pre指针指向反转后链表的首,Cur->next = Pre;//核心1 当前节点的下一个指向旧链表的首部Pre = Cur;//核心2 pre指针指向上一步构建好的反转后链表的首部//}}Cur = Nex;// A 移动指针指向下一个元素} return Pre;
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...