题目详情
给你单链表的头节点 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
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
①首先,我们定义两个快慢指针。
1.将慢指针pre指向null
let pre = null
2.将快指针cur指向头结点
let cur = head
再定义一个指针next指向cur所指向结点的下一个结点
let next = cur.next
next结点的作用保证我们反转时要反转的结点后面的结点不丢失
我们将cur指针所指向的结点指向pre指针指向的结点
②接着移动指针pre到指针cur的所在位置,移动指针cur到指针next的位置
此时我们就已经反转了第一个结点。↑
将next指针指向cur指针所指向结点的下一个结点。
然后重复操作
如此循环,当cur指针指向null时,我们就完成了整个列表的反转。
代码详情 迭代
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
if(!head) return null;
let pre=null,cur=head;
while(cur){
let next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
};
代码详情 ES6解构赋值
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
if(!head) return null;
let pre=null,cur=head;
while(cur){
[cur.next,pre,cur]=[pre,cur,cur.next];
}
return pre;
};