力扣138. 复制带随机指针的链表

在这里插入图片描述
浅拷贝: 返回地址一样的链表。
深拷贝: 返回地址不一样,但关系一致的链表。 所以不能直接简单粗暴的遍历复制, 这样出来的复制是一样的地址,不符合题目的深拷贝要求。
在这里插入图片描述
在这里插入图片描述

"""
# 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: 'Optional[Node]') -> 'Optional[Node]':
        if not head:
            return None
        # 利用哈希映射建立源节点到新节点的映射,key是原节点,value是新节点(新节点就是原节点的复制)
        d = {}
        cur = head
        while cur:
            d[cur] = Node(cur.val)
            cur = cur.next
        
        # 遍历原节点,寻找新节点的next和random节点
        cur = head
        while cur:
            # cur是原节点,d[cur]是新节点,cur.next是原节点的下一个
            # d[cur.next]就是原节点的下一个新节点
            if cur.next:
                d[cur].next = d[cur.next]
            # cur.random是原节点的随机指向
            # d[cur.random]是原节点的随机指向 对应的新节点
            if cur.random:
                d[cur].random = d[cur.random]
            cur = cur.next
        return d[head]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值