Swap Nodes in Pairs https://leetcode.com/problems/swap-nodes-in-pairs/
Generalized Solution for K Splits
- Use the concept of dummy sentinel nodes
- Create an array of K head nodes and their respective tail pointers
- Node k gets appended to k%K list.
- Now create a result dummy node. Iterate the array of tails in reverse order and keep adding row by row.
class Solution(object): def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ K = 2 splits = [ListNode(-1) for _ in range(K)] tails = [splits[i] for i in range(K)] k = 0 while head: temp = head.next tails[k % K].next = head tails[k % K] = head head.next = None head = temp k = k + 1 start, tails = ListNode(-1), [splits[i].next for i in range(K)] result = start while k > 0: for i in range(len(tails)-1,-1,-1): if tails[i] != None: temp = tails[i].next result.next = tails[i] result = tails[i] tails[i].next = None tails[i] = temp k -= 1 return start.next