Teaching Kids Programming – Pairwise Linked List Nodes Swap Algorithm


Teaching Kids Programming: Videos on Data Structures and Algorithms

Given a singly linked list node, swap each pair of nodes and return the new head.

Constraints
n ≤ 100,000 where n is the number of nodes in node
Example 1
Input
node = [0, 1, 3, 4]
Output
[1, 0, 4, 3]

Example 2
Input
node = [1, 2, 3]
Output
[2, 1, 3]

Convert Linked List to List: Pairwise Linked List Swap

For most linked list problems, we can convert (copy) to a list/array, then we can easily perform the pairwise swaps. Then we convert the list/array back to a linked list:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# class LLNode:
#     def __init__(self, val, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def PairwiseLinkedListSwap(self, node):
        data = []
        while node:
            data.append(node.val)
            node = node.next
        
        for i in range(1, len(data), 2):
            data[i], data[i - 1] = data[i - 1], data[i]
 
        dummy = LLNode(-1)
        head = dummy
        for i in data:
            head.next = LLNode(i)
            head = head.next
 
        return dummy.next
# class LLNode:
#     def __init__(self, val, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def PairwiseLinkedListSwap(self, node):
        data = []
        while node:
            data.append(node.val)
            node = node.next
        
        for i in range(1, len(data), 2):
            data[i], data[i - 1] = data[i - 1], data[i]

        dummy = LLNode(-1)
        head = dummy
        for i in data:
            head.next = LLNode(i)
            head = head.next

        return dummy.next

Time and space complexity is O(N) where N is the number of the nodes in the linked list.

Swap the Values of Nodes

We can follow/walk the link list and swap the values of every two nodes.

1
2
3
4
5
6
7
8
9
10
11
# class LLNode:
#     def __init__(self, val, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def PairwiseLinkedListSwap(self, node):
        head = node
        while head and head.next:
            head.val, head.next.val = head.next.val, head.val
            head = head.next.next
        return node
# class LLNode:
#     def __init__(self, val, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def PairwiseLinkedListSwap(self, node):
        head = node
        while head and head.next:
            head.val, head.next.val = head.next.val, head.val
            head = head.next.next
        return node

The time complexity is O(N) and the space complexity is O(1).

Reverse the Link

We can reverse the link for every two nodes. To do this, we can first reverse the link for the first two nodes, then then recursively link to the rest.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# class LLNode:
#     def __init__(self, val, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def PairwiseLinkedListSwap(self, node):
        if not node or not node.next:
            return node
 
        tail = self.solve(node.next.next)
        head = node.next
        head.next = node
        node.next = tail
 
        return head
# class LLNode:
#     def __init__(self, val, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def PairwiseLinkedListSwap(self, node):
        if not node or not node.next:
            return node

        tail = self.solve(node.next.next)
        head = node.next
        head.next = node
        node.next = tail

        return head

Time complexity is O(N). Space complexity is also O(N) due to recursion.

–EOF (The Ultimate Computing & Technology Blog) —

GD Star Rating
loading...
485 words
Last Post: Teaching Kids Programming - Inplace Algorithms to Remove Elements
Next Post: Teaching Kids Programming - Linked List Jumps via Recursion

The Permanent URL is: Teaching Kids Programming – Pairwise Linked List Nodes Swap Algorithm

Leave a Reply