package main type ListNode struct { Val int Next *ListNode } func main() { } func swapPairs(head *ListNode) *ListNode { firstNode := (*ListNode)(head) secondNode := (*ListNode)(nil) num := 0 for head != nil { if head.Next != nil { if head.Next.Next != nil { if num == 0 { firstNode = head.Next secondNode = head } if secondNode != nil && num != 0 { secondNode.Next = head.Next } tmpright := head.Next.Next head.Next.Next = head head.Next = tmpright secondNode = head head = tmpright num++ continue } else { if num == 0 { firstNode = head.Next secondNode = head } if secondNode != nil && num != 0 { secondNode.Next = head.Next } tmpright := head.Next.Next head.Next.Next = head secondNode = head head.Next = tmpright } } head = head.Next num++ } return firstNode }