题目来源:链接
题目描述:
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
示例 1:
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
实现代码:
def copyRandomList(self, head: 'Node') -> 'Node':
def dfs(head):
if not head:
return None
if head in visited:
return visited[head]
copy = Node(head.val,None,None)
visited[head] = copy
copy.next = dfs(head.next)
copy.random = dfs(head.random)
return copy
visited = {}
return dfs(head)
解题思路:
其实我们可以看成这就是一个图:图由多个节点组成,每个节点有两个指针next和random
按照C++,我们可以将图变成邻接表或者邻接矩阵,
遍历的方式有DFS(递归)和BFS(队列,迭代),这里主要考察的就是图的遍历