跳到主要内容

Copy List with Random Pointer

描述

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

分析

代码

# Copy List with Random Pointer
# 两遍扫描,时间复杂度O(n),空间复杂度O(1)
class Solution:
def copyRandomList(self, head):
cur = head
while cur:
node = RandomListNode(cur.val)
node.next = cur.next
cur.next = node
cur = node.next

cur = head
while cur:
if cur.random:
cur.next.random = cur.random.next
cur = cur.next.next

# 分拆两个单链表
dummy = RandomListNode(-1)
cur = head
new_cur = dummy
while cur:
new_cur.next = cur.next
new_cur = new_cur.next
cur.next = cur.next.next
cur = cur.next
return dummy.next

class RandomListNode:
def __init__(self, x, next=None, random=None):
self.val = x
self.next = next
self.random = random