当前位置: 首页 > article >正文

python-leetcode-随机链表的复制

138. 随机链表的复制 - 力扣(LeetCode)

"""
# 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

        # Step 1: Create new nodes and insert them after each original node
        cur = head
        while cur:
            new_node = Node(cur.val)
            new_node.next = cur.next
            cur.next = new_node
            cur = new_node.next

        # Step 2: Assign random pointers for the new nodes
        cur = head
        while cur:
            if cur.random:
                cur.next.random = cur.random.next
            cur = cur.next.next

        # Step 3: Separate the new list from the original list
        cur = head
        new_head = head.next
        while cur:
            new_node = cur.next
            cur.next = new_node.next
            cur = cur.next
            if new_node.next:
                new_node.next = new_node.next.next

        return new_head


http://www.kler.cn/a/516457.html

相关文章:

  • 2024 行远自迩,笃行不怠
  • MinIO的安装与使用
  • 从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
  • SQL-leetcode—1141. 查询近30天活跃用户数
  • 简识JVM私有内存区域栈、数据结构
  • Android SystemUI——通知栏构建流程(十六)
  • 编写0号中断的处理程序
  • 【博客之星】年度总结:在云影与墨香中探寻成长的足迹
  • 牛客周赛 Round 77 A-C
  • 设计新的 Kibana 仪表板布局以支持可折叠部分等
  • Redis面试题每日20道【其二】
  • C语言二级
  • DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展
  • Android AutoMotive --CarService
  • SpringBoot如何自定义Starter ?
  • 【BUUCTF】[HITCON 2017]SSRFme1
  • 总结7。。
  • 指针生成网络(PGN)详细指南(引入)
  • 【橘子Kibana】Kibana的分析能力Analytics简易分析
  • mybatis-plus之使用lombok的@Builder注解之后的坑
  • selenium xpath定位一组元素中的某一个
  • 使用BitaHub部署DeepSeek-R1
  • malloc与new的比较
  • JAVA-快速排序
  • war包 | Docker部署flowable-ui
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(六)-分巧克力、K倍区间