韩槑槑

LeetCode No.206 反转链表

字数统计: 206阅读时长: 1 min
2018/11/09 Share

最近一直在 LeetCode 上刷题来熟悉 Go 的语法,遇见一道很绕头的题分享一下

题目要求:反转一个单链表

题目示例:

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

题目解法:

1
2
3
4
5
6
7
8
9
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
res := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return res
}

答案解析

初始状态时:
file

让我们迭代至 head 指向 4 时,res = 5 -> nil
我们要使 5 -> nil 变为 5 -> 4,则 head.Next.Next = head,即
file
此时明显可以看出 4和5 形成了一个环,则 head.Next = nil,即
file
此时可知当前返回后迭代至 head 指向 3res = 5 -> 4 -> nil
同样的根据上述流程可得
file
最终结果
file

CATALOG