package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return newHead
}
// reverseList 反转单链表
func reverseList2(head *ListNode) *ListNode {
prev := nil
curr := head
for curr != nil {
next := curr.Next // 先保存下一个节点
curr.Next = prev // 将当前节点的 Next 指向前一个节点,实现反转
prev = curr // 移动 prev 和 curr 向前移动
curr = next //当前节点移到下一个
}
return prev // prev 将会是新链表的头节点
}
func main() {
// 创建一个链表: 1 -> 2 -> 3 -> 4 -> 5
head := &ListNode{Val: 1}
temp := head
for i := 2; i <= 5; i++ {
temp.Next = &ListNode{Val: i}
temp = temp.Next
}
// 翻转链表
newHead := reverseList(head)
// 打印翻转后的链表: 5 -> 4 -> 3 -> 2 -> 1
for newHead != nil {
fmt.Print(newHead.Val, " -> ")
newHead = newHead.Next
}
fmt.Println()
}