Skip to content

24. Swap Nodes in Pairs

Description

Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list’s nodes. Only nodes itself may be changed.

Example 1:

Input: head = [1,2,3,4]
Output: [2,1,4,3]

Example 2:

Input: head = []
Output: []

Example 3:

Input: head = [1]
Output: [1]

Constraints:

  • The number of nodes in the list is in the range [0, 100].
  • 0 <= Node.val <= 100.

Solutions

I Iteration

Complexity:

  • Time complexity: \(O(n)\).
  • Space complexity: \(O(1)\).
type ListNode struct {
    Val  int
    Next *ListNode
}

func swapPairs(head *ListNode) *ListNode {
    dummy := &ListNode{Val: 0, Next: head}
    p := dummy

    for p.Next != nil && p.Next.Next != nil {
        pairA, pairB := p.Next, p.Next.Next

        pairA.Next = pairB.Next
        pairB.Next = pairA
        p.Next = pairB
        p = pairA
    }

    return dummy.Next
}