题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
来源:力扣(LeetCode)
解答
先上代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
var ret *ListNode
p := head
for p != nil {
next := p.Next
p.Next = ret
ret = p
p = next
}
return ret
}
基本思想就是如图所示:
p
从head
依次遍历至尾节点的next
,ret
紧随其后。
开始ret
指向空,p指向head,再建立一个临时存储量tmp
,开始循环,循环条件是p != nil
tmp
临时量接受p.Next
,让p
的Next
指向ret
,然后让ret
指向当前的p
,再让p
指向tmp
(也就是原来的p
的next
),依次循环即可