题目
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。
要求返回这个链表的 深拷贝。
链接:https://leetcode.com/problems/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.
The Linked List is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:
- val: an integer representing Node.val
- random_index: the index of the node (range from 0 to n-1) where random pointer points to, or null if it does not point to any node.
Example:
Input: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
Output: [[7,null],[13,0],[11,4],[10,2],[1,0]]
思路及代码
- linked list
"""
# 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
# copy nodes
cur = head
dic = {}
while cur:
dic[cur] = Node(cur.val)
cur = cur.next
# copy next and random
cur = head
while cur:
if cur.random:
dic[cur].random = dic[cur.random]
if cur.next:
dic[cur].next = dic[cur.next]
cur = cur.next
return dic[head]
复杂度
T =
O
(
n
)
O(n)
O(n)
S =
O
(
n
)
O(n)
O(n)