&也许是面试中最常考察的算法题… &

206. 反转链表

难度: 简单




所给代码中已经定义好了一个单链表

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
28
29
30
31
32
33
34
35
36
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {


if head == nil {
return head
}

var prev *ListNode

var curt *ListNode = head

for curt != nil {
//var temp *ListNode = curt.Next //暂存下一个节点

//指针反转
//curt.Next = prev

//往下走一步
// prev = curt
//curt = temp


//三者交换value..可以不引入temp中间变量;但结合下图,还是用之前引入temp变量的写法更好理解
curt.Next,prev,curt = prev,curt,curt.Next
}

return prev

}


图片来自:大圣算法



升级款:

leetcode-92 反转链表II