一、题目描述
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例1:
输入: head = [1,2,3,4,5] 输出: [5,4,3,2,1] 复制代码
示例2:
输入: 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; }; 复制代码
四、总结
这题在思维上没有什么难度,但是对我们的代码实现能力的要求比较高,你可能紧张一不小心就写错了,或写出十几行的代码,不够简洁,所以我们要加强链表题目的代码实现能力!把链表相关常用的语句记住即可~