206.reverse-linked-list.go 620 B

12345678910111213141516171819202122232425262728293031323334353637
  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. reverseRecurse(&head)
  10. return head
  11. // return reverseIter(head, nil)
  12. }
  13. func reverseIter(head, tail *ListNode) *ListNode {
  14. if head == nil {
  15. return tail
  16. }
  17. curr := head
  18. head = head.Next
  19. curr.Next = tail
  20. return reverseIter(head, curr)
  21. }
  22. func reverseRecurse(head **ListNode) {
  23. first := *head
  24. if first == nil {
  25. return
  26. }
  27. rest := first.Next
  28. if rest == nil {
  29. return
  30. }
  31. reverseRecurse(&rest)
  32. first.Next.Next = first
  33. first.Next = nil
  34. *head = rest
  35. }