跳转至

LC24 - 两两交换链表中的节点

SwapNodesInPairs.go
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
}