【剑指 Offer】剑指 Offer 35. 复杂链表的复制

这篇博客探讨了两种不同的Python实现方式来复制带有随机指针的链表。第一种方法虽然能完成任务,但在时间和空间效率上不占优势。第二种方法通过巧妙地调整节点链接,显著提高了执行速度,击败了94.64%的用户,同时保持了较低的内存消耗。这两种方法都通过了所有测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
代码
执行用时:48 ms, 在所有 Python3 提交中击败了18.68% 的用户
内存消耗:15.7 MB, 在所有 Python3 提交中击败了73.78% 的用户
通过测试用例:18 / 18

class Solution:
    def copyRandomList(self, head: 'Node') -> 'Node':
        if not head: return
        dic = {}
        # 3. 复制各节点,并建立 “原节点 -> 新节点” 的 Map 映射
        cur = head
        while cur:
            dic[cur] = Node(cur.val)
            cur = cur.next
        cur = head
        # 4. 构建新节点的 next 和 random 指向
        while cur:
            dic[cur].next = dic.get(cur.next)
            dic[cur].random = dic.get(cur.random)
            cur = cur.next
        # 5. 返回新链表的头节点
        return dic[head]

【方法2】
执行用时:32 ms, 在所有 Python3 提交中击败了94.64% 的用户
内存消耗:15.7 MB, 在所有 Python3 提交中击败了73.78% 的用户
通过测试用例:18 / 18

class Solution:
    def copyRandomList(self, head: 'Node') -> 'Node':
        if not head: return
        cur = head
        while cur:
            newNode=Node(cur.val)
            newNode.next=cur.next
            cur.next=newNode
            cur=newNode.next
        cur=head
        while cur:
            if cur.random:
                cur.next.random=cur.random.next
            cur=cur.next.next
        ans=cur=head.next
        pre=head
        while cur.next:
            pre.next=pre.next.next
            cur.next=cur.next.next
            pre=pre.next
            cur=cur.next
        pre.next=None
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值