力扣经典150题第五十九题: 随机链表的复制

2024-05-12 11:04

本文主要是介绍力扣经典150题第五十九题: 随机链表的复制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

      • 1. 题目分析
      • 2. 解题思路
      • 3. Java代码实现
      • 4. 测试示例
      • 5. 总结

标题:使用Java实现随机链表的深拷贝

随机链表的深拷贝是一道经典的链表问题,需要在复制链表的同时处理随机指针。在本文中,我们将使用Java来解决LeetCode上的第五十九题,实现随机链表的深拷贝。

1. 题目分析

题目要求给定一个随机链表的头节点,我们需要复制该链表并返回复制链表的头节点。每个节点除了有普通的next指针外,还有一个random指针,指向链表中的任意节点或空节点。

2. 解题思路

为了实现随机链表的深拷贝,我们可以使用HashMap来存储原节点和复制节点之间的映射关系。具体步骤如下:

  • 第一次遍历:创建新节点,并将原节点和新节点的映射关系存储在HashMap中。
  • 第二次遍历:根据HashMap中的映射关系,复制原链表的next指针和random指针。

3. Java代码实现

import java.util.HashMap;
import java.util.Map;class Node {int val;Node next, random;public Node(int val) {this.val = val;this.next = null;this.random = null;}
}public class CopyRandomList {public Node copyRandomList(Node head) {if (head == null) return null;Map<Node, Node> map = new HashMap<>();Node cur = head;// 第一次遍历:创建新节点,并建立原节点和新节点的映射关系while (cur != null) {map.put(cur, new Node(cur.val));cur = cur.next;}cur = head;// 第二次遍历:复制next指针和random指针while (cur != null) {map.get(cur).next = map.get(cur.next);map.get(cur).random = map.get(cur.random);cur = cur.next;}return map.get(head);}
}

4. 测试示例

我们使用几个示例来测试我们的代码:

public class Main {public static void main(String[] args) {// 示例1Node node1 = new Node(7);Node node2 = new Node(13);Node node3 = new Node(11);Node node4 = new Node(10);Node node5 = new Node(1);node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5;node2.random = node1; node3.random = node5; node4.random = node3; node5.random = node1;CopyRandomList solution = new CopyRandomList();Node copiedList1 = solution.copyRandomList(node1);printList(copiedList1);// 示例2Node node6 = new Node(1);Node node7 = new Node(2);node6.next = node7;node6.random = node7;node7.random = node7;Node copiedList2 = solution.copyRandomList(node6);printList(copiedList2);}public static void printList(Node head) {Node cur = head;while (cur != null) {System.out.print("[" + cur.val + ", ");if (cur.random != null) {System.out.print(cur.random.val);} else {System.out.print("null");}System.out.print("] ");cur = cur.next;}System.out.println();}
}

5. 总结

本文介绍了如何使用Java实现随机链表的深拷贝。通过HashMap来建立原节点和新节点之间的映射关系,实现了链表的深拷贝。这是一道经典的链表问题,在面试中也经常会被考察到。

这篇关于力扣经典150题第五十九题: 随机链表的复制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982443

相关文章

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结