《剑指Offer》刷题笔记——面试题35. 复杂链表的复制

难度:中等

一、题目描述:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、解题分析:

"""
# 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: 'Node') -> 'Node':
        if not head:
            return None

        # 第一遍遍历,把每个新生成的结点放在对应的旧结点后面
        p = head
        while p:
            new_node = Node(p.val)
            new_node.next = p.next
            p.next = new_node

            p = new_node.next       # 下一个旧结点
        
        # 第二遍修改每个新结点的 next 和 random 
        p = head
        while p:
            next_origin = p.next.next        # 下一个旧结点备份一下
            p.next.next = next_origin.next if next_origin else None   # 修改新结点的 next
            p.next.random = p.random.next if p.random else None    # 修改新结点的 random

            p = next_origin         # 下一个旧结点
        
        return head.next
发布了133 篇原创文章 · 获赞 155 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34108714/article/details/104691880
今日推荐