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

Leetcode面试经典150题-138.随机链表的复制

题目比较简单,重点是理解思想,random不管,copy一定要放在next

而且里面的遍历过程不能省略

解法都在代码里,不懂就留言或者私信

/*
// Definition for a Node.
class Node {int val;Node next;Node random;public Node(int val) {this.val = val;this.next = null;this.random = null;}
}
*/class Solution {/**基本思路:1.遍历链表,每个节点拷贝一个节点放到它的next位置,然后它的copy的下一个放它原来的next2.把copy的random指针指向原始节点random指针的下一个(因为下一个是random的copy)3.拆分链表,把新的链表拷贝出来*/public Node copyRandomList(Node head) {if(head == null) {return null;}/**遍历链表复制节点并连接 */Node cur = head;while(cur != null) {Node next = cur.next;Node curCopy = new Node(cur.val);cur.next = curCopy;curCopy.next = next;cur = next;}/**设置新节点的random指针*/cur = head;while(cur != null) {/**这里因为存在复制节点并且复制节点肯定放在原始节点的下一个,所以cur.next肯定不为空,所以这里不会有空指针的问题*/Node next = cur.next.next;cur.next.random = cur.random == null? null : cur.random.next;cur = next;}/**断开链接,分离出拷贝链表,这里先把拷贝链表头节点拿出来*/Node newHead = head.next;/**还是通过从原来的头开始遍历,因为原链表要改next指针 */cur = head;while(cur != null) {/**拿到原来链表中的next,这个next可能为空 */Node next = cur.next.next;/**这里有可能next是null,要判断,不然会有空指针 */cur.next.next = next == null? null : next.next;/**指向原来的next */cur.next = next;/**指针挪到下个节点继续 */cur = next;}return newHead;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 构建“零工市场小程序”,服务灵活就业“大民生”
  • 2025年最新大数据毕业设计选题-基于Hive分析相关
  • 34.贪心算法1
  • STP 笔记
  • Village Exteriors Kit 中世纪乡村房屋场景模型
  • 【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解)
  • 探索人工智能的未来趋势
  • CI/CD持续集成和持续交付(git工具、gitlab代码仓库、jenkins)
  • 设计模式 桥接模式(Bridge Pattern)
  • Python数据分析工具(一):Requests的用法
  • Unity实战案例全解析 :PVZ 植物脚本分析
  • 经典sql题(六)查找用户每月累积访问次数
  • 【Hot100】LeetCode—84. 柱状图中最大的矩形
  • Rust表达一下中秋祝福,群发问候!
  • 【优化器】Optimizer——深度学习中的优化器是什么作用呢?
  • [PHP内核探索]PHP中的哈希表
  • [deviceone开发]-do_Webview的基本示例
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • java中的hashCode
  • LeetCode18.四数之和 JavaScript
  • Redux系列x:源码分析
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 不上全站https的网站你们就等着被恶心死吧
  • 从0到1:PostCSS 插件开发最佳实践
  • 分享一份非常强势的Android面试题
  • 判断客户端类型,Android,iOS,PC
  • 如何优雅地使用 Sublime Text
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • #define用法
  • #window11设置系统变量#
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (ibm)Java 语言的 XPath API
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (十八)SpringBoot之发送QQ邮件
  • (一)UDP基本编程步骤
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET C# 配置 Options
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET业务框架的构建
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Transaction注解失效的几种场景(附有示例代码)
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C#]实现GRPC通讯的服务端和客户端实例
  • [C++基础]-初识模板
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [CF494C]Helping People
  • [CLR via C#]11. 事件