📅  最后修改于: 2023-12-03 15:40:53.291000             🧑  作者: Mango
本篇介绍一个Python程序集,用于克隆具有 Next 和随机指针的链表。此程序集基于深度克隆(deepcopy)对链表进行克隆。
class RandomListNode:
def __init__(self, x):
self.label = x
self.next = None
self.random = None
class Solution:
# @param head, a RandomListNode
# @return a RandomListNode
def copyRandomList(self, head):
if not head:
return None
# 利用一个字典记录每个节点的克隆节点
dic = {}
# 深度克隆原链表中的每个节点
cur = head
while cur:
dic[cur] = RandomListNode(cur.label)
cur = cur.next
# 连接克隆节点的 next 和 random 指针
cur = head
while cur:
dic[cur].next = dic.get(cur.next)
dic[cur].random = dic.get(cur.random)
cur = cur.next
# 返回克隆链表的头节点
return dic[head]
该程序集主要依靠深度克隆(deepcopy)对链表进行克隆。在克隆之前,首先需要使用一个字典记录原链表中每个节点的克隆节点,然后在进行克隆的同时,将原链表中每个节点的 next 指针和 random 指针对应的节点克隆节点的 next 指针和 random 指针赋值即可。
该程序集需要创建 RandomListNode 类来定义链表中每个节点的结构,具体代码实现如下:
class RandomListNode:
def __init__(self, x):
self.label = x
self.next = None
self.random = None
在克隆链表之前,需要先创建一个原链表的头节点,然后利用 next 指针将所有节点连接起来。接下来,使用 Python 的类实例化该程序集,并传入头节点,即可得到克隆链表的头节点。
具体的使用示例代码如下:
head = RandomListNode(1)
head.next = RandomListNode(2)
head.next.next = RandomListNode(3)
head.random = head.next.next
head.next.random = head
s = Solution()
clone_head = s.copyRandomList(head)
print(clone_head.label) # 输出:1
print(clone_head.random.label) # 输出:3
print(clone_head.next.random.label) # 输出:1