题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
解析
注意这道题是要翻转整个链表,而不是两两交换链表的节点;所以在改变节点指向下个指针的顺序后,像一个滑动窗口一样一直向前赋值移动,直到结束
那么想一下,为什么下面的代码,最后返回的是pre呢?这个需要画个图,也可以看这个for循环的条件,结束条件是cur == nil,那么pre在cur的前面,所以正好就是反转后的头节点
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
var pre *ListNode
//dummy := &ListNode{} //之前初始化哑节点是用这种方式,在这里用的话,返回结果会多一个0
//不用dummy的原因是这里不是头节点,其实相当于一个临时的tmp节点
cur := head
for cur != nil {
next := cur.Next
cur.Next = pre
pre = cur
cur = next
}
return pre
}