206. 反转链表 #
题目地址 #
类似/相同题目: 剑指 Offer 24. 反转链表
解题思路 #
迭代法 #
TODO
递归法 #
TODO
具体实现 #
package main
type ListNode struct {
Val int
Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
if head == nil {
return nil
}
var (
prev, next *ListNode
curr = head
)
for curr != nil {
next = curr.Next
curr.Next = prev
// 下一个
prev = curr
curr = next
}
return prev
}
func main() {
reverseList(&ListNode{
Val: 1, Next: &ListNode{Val: 2, Next: &ListNode{Val: 3, Next: &ListNode{Val: 4, Next: &ListNode{Val: 5}}}}})
}
package main
import (
"fmt"
)
type ListNode struct {
Val int
Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
// head == null:当第一次输入为 nil 的时候直接返回 nil,不进行递归操作。
// head.next == null:返回链表的最后一个节点
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return newHead
}
func main() {
x := reverseList(&ListNode{
Val: 1,
Next: &ListNode{
Val: 2,
Next: &ListNode{
Val: 3,
Next: &ListNode{
Val: 4,
Next: nil,
},
},
},
})
fmt.Println(x)
}