JZ25 复杂链表的复制 python

JZ25 复杂链表的复制

在这里插入图片描述
哈希表
my version
错误记录

  1. 复制首节点时,不能np_指针不能往后移,否则会为空
class RandomListNode:
    def __init__(self, x):
        self.label = x
        self.next = None
        self.random = None
class Solution:
    # 返回 RandomListNode
    def Clone(self, pHead):
        if not pHead:
            return
        nL = None
        op = pHead
        np_ = nL
        map_old_new = {} # {old_p:new_p}
        while op:
            node = RandomListNode(op.label)
            if not nL:
                nL = node
                np_ = nL
            else:
                np_.next = node
                np_ = np_.next # 不能写在后面
            map_old_new[op] = node
            op = op.next
            
        op = pHead
        while op:
            if op.random:
                map_old_new[op].random = map_old_new[op.random]
            op = op.next
        return nL

book version

  1. 复制原节点连接在原节点之后
  2. 复制随机连接
  3. 断开为两个链表

错误记录

  1. 指针指向链表时需要注意是否指向的为引用
    eg pnext = p.next p.next = p.next.next此时pnext的值会指向p.next.next而没有保留p.next
class RandomListNode:
    def __init__(self, x):
        self.label = x
        self.next = None
        self.random = None
class Solution:
    # 返回 RandomListNode
    def Clone(self, pHead):
        # write code here
        if not pHead:
            return
        p = pHead
        while p:
            copy = RandomListNode(p.label)
            copy.next = p.next
            p.next = copy
            p = p.next.next
            
        p = pHead
        while p:
            if p.random:
                p.next.random = p.random.next
            p = p.next.next
            
        p = pHead
        copy_list = pHead.next
        cp = pHead.next
        while p:
            p.next = p.next.next
            p = p.next
            if cp.next:
                cp.next = cp.next.next
                cp = cp.next
        return copy_list
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值