206.reverse-linked-list.go 594 B

12345678910111213141516171819202122232425262728293031
  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func reverseList(head *ListNode) *ListNode {
  9. return reverseRecurse(head)
  10. // return reverseIter(head, nil)
  11. }
  12. func reverseIter(head, tail *ListNode) *ListNode {
  13. if head == nil {
  14. return tail
  15. }
  16. curr := head
  17. head = head.Next
  18. curr.Next = tail
  19. return reverseIter(head, curr)
  20. }
  21. func reverseRecurse(head *ListNode) *ListNode {
  22. if head == nil || head.Next == nil {
  23. return head
  24. }
  25. newHead := reverseRecurse(head.Next)
  26. head.Next.Next = head
  27. head.Next = nil
  28. return newHead
  29. }