【切图仔的算法修炼之旅】LeetCode206:反转链表

简介: 【切图仔的算法修炼之旅】LeetCode206:反转链表

一、题目描述


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


示例1:



e7c08c3ba94e41f7b94583ec57ed3c35_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]
复制代码


示例2:


6fe898027e804d21b0b963a5504f4f8a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


输入: head = [1,2]
输出: [2,1]
复制代码


提示:


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


二、思路分析


这一道题目本身没有思维上的难度,我们只需要将每一个节点的next指到它的前驱结点去即可


这里考察的并不是你的思维能力,它主要考察的是你的代码的实现能力,关键一点是我们需要两个指针来记录,一个是记录了当前节点(cur),还有一个记录的是前面的节点(prev)。我们首先需要把cur节点设置为head,然后将prev设置为空,因为一开始是空,然后我们需要不断循环更新cur,直到链表结束,返回prev节点即可。


三、AC代码


/**
 * @param {ListNode} head
 * @return {ListNode}
 */
let reverseList = function (head) {
  let cur, prev;
  [cur, prev] = [head, null]; 
  while (cur) {
    [cur.next, prev, cur] = [prev, cur, cur.next];// ES6结构赋值交换变量
  }
  return prev;
};
复制代码


四、总结


这题在思维上没有什么难度,但是对我们的代码实现能力的要求比较高,你可能紧张一不小心就写错了,或写出十几行的代码,不够简洁,所以我们要加强链表题目的代码实现能力!把链表相关常用的语句记住即可~

相关文章
|
6天前
|
算法
【C算法】链表算法
【C算法】链表算法
|
4天前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
3天前
|
存储 算法
LeetCode第86题分隔链表
文章介绍了LeetCode第86题"分隔链表"的解法,通过创建两个新链表分别存储小于和大于等于给定值x的节点,然后合并这两个链表来解决问题,提供了一种简单易懂且操作原链表的解决方案。
LeetCode第86题分隔链表
|
3天前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
4天前
|
算法
LeetCode第23题合并 K 个升序链表
这篇文章介绍了LeetCode第23题"合并K个升序链表"的解题方法,使用分而治之的思想,通过递归合并链表的方式解决了这个难题。
LeetCode第23题合并 K 个升序链表
|
3天前
|
算法
LeetCode第92题反转链表 II
文章分享了LeetCode第92题"反转链表 II"的解法,通过使用四个指针来记录和更新反转链表段的头部、尾部以及前一个和后一个节点,提供了一种清晰且易于理解的解决方案。
LeetCode第92题反转链表 II
|
4天前
|
算法
LeetCode第21题合并两个有序链表
该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
LeetCode第21题合并两个有序链表
|
4天前
|
算法
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
5天前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
3天前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
4 0