/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reverseList(head *ListNode) *ListNode { return reverseRecurse(head) // return reverseIter(head, nil) } func reverseIter(head, tail *ListNode) *ListNode { if head == nil { return tail } curr := head head = head.Next curr.Next = tail return reverseIter(head, curr) } func reverseRecurse(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } newHead := reverseRecurse(head.Next) head.Next.Next = head head.Next = nil return newHead }