package LinkedList
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
virtualHead := new(ListNode)
tail := virtualHead
tail.Next = head
slow, fast := head, head.Next
for {
slow.Next = fast.Next
fast.Next = slow
tail.Next = fast
slow, fast = fast, slow
if fast.Next == nil || fast.Next.Next == nil {
break
}
tail = fast
slow = slow.Next.Next
fast = fast.Next.Next
}
return virtualHead.Next
}