138. Copy List with Random Pointer
Read the full problem statement on LeetCode.
Difficulty: medium Acceptance: 60% Topics: Hash Table, Linked List
View full problem on LeetCode Reading material
Reference solution (spoiler · python)
# Definition for a Node.
# class Node:
# def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
# self.val = int(x)
# self.next = next
# self.random = random
class Solution:
def copyRandomList(self, head: "Node") -> "Node":
if not head:
return None
# Step 1: Duplicate nodes and insert them in between the original nodes
current = head
while current:
duplicate = Node(current.val)
duplicate.next = current.next
current.next = duplicate
current = duplicate.next
# Step 2: Update random pointers for the duplicate nodes
current = head
while current:
if current.random:
current.next.random = current.random.next
current = current.next.next
# Step 3: Split the combined list into two separate lists
original = head
duplicate_head = head.next
current = duplicate_head
while original:
original.next = original.next.next
if current.next:
current.next = current.next.next
original = original.next
current = current.next
return duplicate_head
Solution from kamyu104/LeetCode-Solutions · MIT