在Golang中,可以使用迭代和遞歸兩種方法來反轉鏈表。
迭代法: 迭代法是通過遍歷鏈表,逐個改變指針的指向實現鏈表的反轉。
type ListNode struct {
Val int
Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
var prev *ListNode
curr := head
for curr != nil {
next := curr.Next
curr.Next = prev
prev = curr
curr = next
}
return prev
}
遞歸法: 遞歸法是通過遞歸地反轉鏈表的子鏈表,并改變相鄰節點的指針指向實現鏈表的反轉。
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
}
無論使用哪種方法,都需要注意處理鏈表為空或只有一個節點的情況,以及在迭代法中,始終保持對下一個節點的引用。