24.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. /* type ListNode struct {
  3. Val int
  4. Next *ListNode
  5. } */
  6. /* func list2str(head *ListNode) string {
  7. curr := head
  8. str := make([]rune, 0)
  9. for curr != nil {
  10. str = append(str, rune(curr.Val+'0'))
  11. curr = curr.Next
  12. }
  13. return string(str)
  14. } */
  15. /**
  16. * Definition for singly-linked list.
  17. * type ListNode struct {
  18. * Val int
  19. * Next *ListNode
  20. * }
  21. */
  22. // before -> curr -> curr.Next -> after
  23. func swapPairsOld(head *ListNode) *ListNode {
  24. if head == nil || head.Next == nil {
  25. return head
  26. }
  27. // initialize before, curr, after
  28. before := &ListNode{0, head}
  29. curr := head
  30. after := curr.Next.Next
  31. // swap node
  32. before.Next = curr.Next
  33. curr.Next.Next = curr
  34. curr.Next = after
  35. // head of result
  36. res := before.Next
  37. for after != nil && after.Next != nil {
  38. // move ptr
  39. before = curr
  40. curr = after
  41. after = after.Next.Next
  42. // swap node
  43. before.Next = curr.Next
  44. curr.Next.Next = curr
  45. curr.Next = after
  46. }
  47. return res
  48. }
  49. func swapPairs(head *ListNode) *ListNode {
  50. dummy := ListNode{0, head}
  51. curr := &dummy
  52. for curr.Next != nil && curr.Next.Next != nil {
  53. first, second := curr.Next, curr.Next.Next
  54. // swap node
  55. first.Next = second.Next
  56. second.Next = first
  57. curr.Next = second
  58. // move forward
  59. curr = curr.Next.Next
  60. }
  61. return dummy.Next
  62. }
  63. /* func main() {
  64. l15 := ListNode{5, nil}
  65. l14 := ListNode{4, &l15}
  66. l13 := ListNode{3, &l14}
  67. l12 := ListNode{2, &l13}
  68. l1 := &ListNode{1, &l12}
  69. fmt.Println(list2str(swapPairs(l1)))
  70. l22 := ListNode{2, nil}
  71. l2 := &ListNode{1, &l22}
  72. fmt.Println(list2str(swapPairs(l2)))
  73. l33 := ListNode{3, nil}
  74. l32 := ListNode{2, &l33}
  75. l3 := &ListNode{1, &l32}
  76. fmt.Println(list2str(swapPairs(l3)))
  77. fmt.Println(list2str(swapPairs(&ListNode{1, nil})))
  78. } */