main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. type ListNode struct {
  6. Val int
  7. Next *ListNode
  8. }
  9. /*
  10. func swapPairs(head *ListNode) *ListNode {
  11. res := new(ListNode)
  12. res.Next = head
  13. p := res.Next
  14. fmt.Print("changeOrgin:")
  15. for p != nil {
  16. fmt.Print(p.Val)
  17. p = p.Next
  18. }
  19. fmt.Println("")
  20. cur := res
  21. if head == nil {
  22. return nil
  23. }
  24. next := head.Next
  25. if next == nil {
  26. return head
  27. }
  28. tmp := next.Next
  29. if tmp == nil {
  30. cur.Next = next
  31. next.Next = head
  32. head.Next = nil
  33. return res.Next
  34. }
  35. cur.Next = next
  36. next.Next = head
  37. head.Next = tmp
  38. p = res.Next
  39. fmt.Print("changeSwap1:")
  40. for p != nil {
  41. fmt.Print(p.Val)
  42. p = p.Next
  43. }
  44. fmt.Println("")
  45. cur = head
  46. head = tmp
  47. next = head.Next
  48. tmp = next.Next
  49. cur.Next = next
  50. next.Next = head
  51. head.Next = tmp
  52. p = res.Next
  53. fmt.Print("changeSwap2:")
  54. for p != nil {
  55. fmt.Print(p.Val)
  56. p = p.Next
  57. }
  58. fmt.Println("")
  59. cur = head
  60. head = tmp
  61. next = head.Next
  62. tmp = next.Next
  63. cur.Next = next
  64. next.Next = head
  65. head.Next = tmp
  66. p = res
  67. fmt.Print("changeSwap3:")
  68. for p != nil {
  69. fmt.Print(p.Val)
  70. p = p.Next
  71. }
  72. fmt.Println("")
  73. return res.Next
  74. }
  75. */
  76. func swapPairs(head *ListNode) *ListNode {
  77. res := new(ListNode)
  78. res.Next = head
  79. // p := res.Next
  80. // fmt.Print("changeOrgin:")
  81. // for p != nil {
  82. // fmt.Print(p.Val)
  83. // p = p.Next
  84. // }
  85. // fmt.Println("")
  86. cur := res
  87. for head != nil && head.Next != nil && head.Next.Next == nil {
  88. head = cur.Next
  89. next := head.Next
  90. cur.Next = next
  91. next.Next = head
  92. head.Next = nil
  93. cur = head
  94. }
  95. for head != nil && head.Next != nil && head.Next.Next != nil {
  96. head = cur.Next
  97. next := head.Next
  98. tmp := next.Next
  99. cur.Next = next
  100. next.Next = head
  101. head.Next = tmp
  102. cur = head
  103. // p = res.Next
  104. // fmt.Print("changeSwap1:")
  105. // for p != nil {
  106. // fmt.Print(p.Val)
  107. // p = p.Next
  108. // }
  109. // fmt.Println("")
  110. }
  111. return res.Next
  112. }
  113. func main() {
  114. data := []int{1, 2}
  115. head := new(ListNode)
  116. p := head
  117. for i := 0; i < len(data); i++ {
  118. node := new(ListNode)
  119. node.Val = data[i]
  120. p.Next = node
  121. p = node
  122. }
  123. // p = head.Next
  124. p = swapPairs(head.Next)
  125. for p != nil {
  126. fmt.Print(p.Val)
  127. p = p.Next
  128. }
  129. }