请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 解题思路:【python3】dict字典:从head节点开始复制,dic作为哈希表记录已经复制的节点,若当前节点为None,返回None;若当前节点在dic中,代表该节点已复制,返回dic中的value(dict的key为当前节点,value为复制节点);若当前节点不在dic中,新建节点cur(将当前节点val赋值,next和random都为None),将其加入dic,其next和random指向的节点调用递归实现,最终返回cur。
#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
"""
dic ={}classSolution:defcopyRandomList(self, head:'Node')->'Node':#深拷贝函数 不推荐#return copy.deepcopy(head)return self.copyNode(head)defcopyNode(self, head):global dic
ifnot head:returnNoneif head in dic:return dic[head]
cur = Node(head.val,None,None)
dic[head]= cur
cur.next= self.copyNode(head.next)
cur.random = self.copyNode(head.random)return cur
// c++/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/classSolution{public:
unordered_map<Node*, Node*> dic;
Node*copyRandomList(Node* head){returncopyNode(head);}
Node*copyNode(Node* head){if(head==NULL)returnNULL;if(!(dic.find(head)==dic.end()))return dic[head];
Node *cur =newNode(head->val);
dic[head]= cur;
cur->next =copyNode(head->next);
cur->random =copyNode(head->random);return cur;}};
35 复杂链表的复制来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。`解题思路:【python3】dict字典:从head节点开始复制,dic作为哈希表记录已经复制的节点,若当前节点为None,返回.