面试题35. 复杂链表的复制
题目描述
做题链接:面试题35. 复杂链表的复制
解题思路
方法一:哈希表
直接通过 哈希表
去存储对应节点的地址。创建 new
和 old
两个节点。old 节点和 new 节点同步访问。对于所有的节点,只访问一次。再次访问的时候,直接返回的是哈希表中存储的地址。
方 法二:遍历搜索 + 哈希表
- DFS
- BFS
代码
方法一: 哈希表
class Solution:
def copyRandomList(self, head: 'Node') -> 'Node':
def copy(node):
if not node: return node
if node in visited:
return visited[node]
else:
visited[node] = Node(node.val)
return visited[node]
if not head: return None
visited = {}
old = head
new = Node(head.val)
visited[old] = new
while old:
new.next = copy(old.next)
new.random = copy(old.random)
new = new.next
old = old.next
return visited[head]