剑指 Offer 24. 反转链表

题目描述:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

思路:

通过prev固定反转后链表头,通过head来反转,通过next指向剩下的链表头部

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   var reverseList = function(head) {
// if(head==null||head.next==null) return head;
// var prev=null;
// var next=null;
// while(head!=null){
// next=head.next;
// head.next=prev;
// prev=head;
// head=next;
// }
// return prev;

// var prev = null,cur=head,temp;
// while(cur){
// temp = cur.next;//修改前先记住下一个节点
// cur.next = prev; //改变指向,第一个节点prev是null,
// prev = cur; //记录前一个节点,供下次循环使用
// cur = temp; // cur通过temp指向下一节点
// }
// return prev;//cur会一直循环直到null


[cur, pre] = [head, null];
while(cur) [cur.next, pre, cur] = [pre, cur, cur.next];
return pre;

};