/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reverseList(head *ListNode) *ListNode { reverseRecurse(&head) return 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) { first := *head if first == nil { return } rest := first.Next if rest == nil { return } reverseRecurse(&rest) first.Next.Next = first first.Next = nil *head = rest }