当前位置: 首页> 健康> 科研 > 【Leetcode 206】 反转链表——此递归相当妙啊

【Leetcode 206】 反转链表——此递归相当妙啊

时间:2025/8/28 6:50:48来源:https://blog.csdn.net/Caoshuang_/article/details/139292146 浏览次数:0次

题目 

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

题解

/** 迭代 通过将每一个节点的next的指向改为指向前一个节点,则相当于逆置*/
function reverseList2(head: ListNode | null): ListNode | null {// 创建pre指针,指向当前节点的前一个节点,let pre = null;//当前节点的指针let cur = head;while (cur) {//保存下一个节点,因为当修改了next指向前一个节点时,就无法找到下一个节点了let nex = cur.next;//将节点的next的指向改为指向前一个节点cur.next = pre;//向后移动两个指针pre = cur;cur = nex;}//   cur这时候为null,pre为最后一个节点,也就是逆置后的头节点return pre;
}/** 递归 */
function reverseList(head: ListNode | null): ListNode | null {//如果head 为空(只在链表为空时,!head 条件才会成立)// !head.next 为空,则head为尾节点,则返回headif (!head || !head.next) return head;//递归链表,直到最后,并保存每一个节点const newHead = reverseList(head.next);//head 节点为当前节点,将下一个节点的next指针指回上一个节点// 如 原本是  4 -> 5 -> 6  ,head为5 ,5.next = 6// 此操作后为 4 -> 5 -> <- 6 , 将 6.next = 5head.next.next = head;//由于上步操作后,5 和 6 相互指向,会成死循环,// 此操作后  4 -> 5 <- 6head.next = null;// 由于递归为栈操作,所以最后返回的newHead为反转链表的表头return newHead;
}

关键字:【Leetcode 206】 反转链表——此递归相当妙啊

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: