123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package main
- import (
- "fmt"
- )
- type ListNode struct {
- Val int
- Next *ListNode
- }
- /*
- func swapPairs(head *ListNode) *ListNode {
- res := new(ListNode)
- res.Next = head
- p := res.Next
- fmt.Print("changeOrgin:")
- for p != nil {
- fmt.Print(p.Val)
- p = p.Next
- }
- fmt.Println("")
- cur := res
- if head == nil {
- return nil
- }
- next := head.Next
- if next == nil {
- return head
- }
- tmp := next.Next
- if tmp == nil {
- cur.Next = next
- next.Next = head
- head.Next = nil
- return res.Next
- }
- cur.Next = next
- next.Next = head
- head.Next = tmp
- p = res.Next
- fmt.Print("changeSwap1:")
- for p != nil {
- fmt.Print(p.Val)
- p = p.Next
- }
- fmt.Println("")
- cur = head
- head = tmp
- next = head.Next
- tmp = next.Next
- cur.Next = next
- next.Next = head
- head.Next = tmp
- p = res.Next
- fmt.Print("changeSwap2:")
- for p != nil {
- fmt.Print(p.Val)
- p = p.Next
- }
- fmt.Println("")
- cur = head
- head = tmp
- next = head.Next
- tmp = next.Next
- cur.Next = next
- next.Next = head
- head.Next = tmp
- p = res
- fmt.Print("changeSwap3:")
- for p != nil {
- fmt.Print(p.Val)
- p = p.Next
- }
- fmt.Println("")
- return res.Next
- }
- */
- func swapPairs(head *ListNode) *ListNode {
- res := new(ListNode)
- res.Next = head
- // p := res.Next
- // fmt.Print("changeOrgin:")
- // for p != nil {
- // fmt.Print(p.Val)
- // p = p.Next
- // }
- // fmt.Println("")
- cur := res
- for head != nil && head.Next != nil && head.Next.Next == nil {
- head = cur.Next
- next := head.Next
- cur.Next = next
- next.Next = head
- head.Next = nil
- cur = head
- }
- for head != nil && head.Next != nil && head.Next.Next != nil {
- head = cur.Next
- next := head.Next
- tmp := next.Next
- cur.Next = next
- next.Next = head
- head.Next = tmp
- cur = head
- // p = res.Next
- // fmt.Print("changeSwap1:")
- // for p != nil {
- // fmt.Print(p.Val)
- // p = p.Next
- // }
- // fmt.Println("")
- }
- return res.Next
- }
- func main() {
- data := []int{1, 2}
- head := new(ListNode)
- p := head
- for i := 0; i < len(data); i++ {
- node := new(ListNode)
- node.Val = data[i]
- p.Next = node
- p = node
- }
- // p = head.Next
- p = swapPairs(head.Next)
- for p != nil {
- fmt.Print(p.Val)
- p = p.Next
- }
- }
|