您的位置:首页 > 文旅 > 美景 > 一起学习LeetCode热题100道(23/100)

一起学习LeetCode热题100道(23/100)

2024/12/23 15:33:37 来源:https://blog.csdn.net/weixin_53224223/article/details/140874255  浏览:    关键词:一起学习LeetCode热题100道(23/100)

23.反转链表(学习)

给你单链表的头节点 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

解析:

一、初始化指针:
1.prev 指针:用于跟踪当前节点的前一个节点,初始时设置为 null,因为反转后的链表的头节点前面没有节点。
2.curr 指针:用于遍历原始链表,初始时设置为链表的头节点 head。

二、迭代遍历链表:
1.在每次迭代中,首先保存 curr 节点的下一个节点到 nextTemp 变量中,以防丢失。
2.然后,将 curr 节点的 next 指针指向 prev,这样就完成了当前节点的反转。
3.接着,将 prev 和 curr 都向前移动一位。具体来说,prev 变成当前的 curr,而 curr 变成之前保存的 nextTemp。

三、返回新的头节点:
1.当 curr 变为 null 时,说明已经遍历完了整个链表,此时 prev 指针将指向新的头节点(即原链表的尾节点)。
2.返回 prev 指针作为反转后链表的头节点。

var reverseList = function(head) {let prev = null; // 前一个节点,初始化为null  let curr = head; // 当前节点,初始化为头节点  while (curr !== null) {  let nextTemp = curr.next; // 临时保存当前节点的下一个节点  curr.next = prev; // 将当前节点的next指针指向前一个节点,实现反转  prev = curr; // 前一个节点前进到当前节点  curr = nextTemp; // 当前节点前进到原来的下一个节点  }  return prev; // 当循环结束时,prev将会是新的头节点
};

版权声明:

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

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