本文主要是介绍力扣经典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题第五十九题: 随机链表的复制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!