From 291f33e26f485bab078073bba406a53e275c1c33 Mon Sep 17 00:00:00 2001 From: "huangge1199@hotmail.com" Date: Sat, 20 Mar 2021 15:04:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=91=E6=8C=87=20Offer=2035:=E5=A4=8D?= =?UTF-8?q?=E6=9D=82=E9=93=BE=E8=A1=A8=E7=9A=84=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editor/cn/FuZaLianBiaoDeFuZhiLcof.java | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 LeetCode/src/main/java/leetcode/editor/cn/FuZaLianBiaoDeFuZhiLcof.java diff --git a/LeetCode/src/main/java/leetcode/editor/cn/FuZaLianBiaoDeFuZhiLcof.java b/LeetCode/src/main/java/leetcode/editor/cn/FuZaLianBiaoDeFuZhiLcof.java new file mode 100644 index 0000000..53b5f4b --- /dev/null +++ b/LeetCode/src/main/java/leetcode/editor/cn/FuZaLianBiaoDeFuZhiLcof.java @@ -0,0 +1,129 @@ +//请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指 +//向链表中的任意节点或者 null。 +// +// +// +// 示例 1: +// +// +// +// 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] +//输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] +// +// +// 示例 2: +// +// +// +// 输入:head = [[1,1],[2,1]] +//输出:[[1,1],[2,1]] +// +// +// 示例 3: +// +// +// +// 输入:head = [[3,null],[3,0],[3,null]] +//输出:[[3,null],[3,0],[3,null]] +// +// +// 示例 4: +// +// 输入:head = [] +//输出:[] +//解释:给定的链表为空(空指针),因此返回 null。 +// +// +// +// +// 提示: +// +// +// -10000 <= Node.val <= 10000 +// Node.random 为空(null)或指向链表中的节点。 +// 节点数目不超过 1000 。 +// +// +// +// +// 注意:本题与主站 138 题相同:https://leetcode-cn.com/problems/copy-list-with-random-point +//er/ +// +// +// Related Topics 链表 +// 👍 168 👎 0 + +package leetcode.editor.cn; + +import com.code.leet.entiy.Node; + +import java.util.Arrays; +import java.util.List; + +//剑指 Offer 35:复杂链表的复制 +public class FuZaLianBiaoDeFuZhiLcof { + public static void main(String[] args) { + //测试代码 + Solution solution = new FuZaLianBiaoDeFuZhiLcof().new Solution(); + List var = Arrays.asList(7, 13, 11, 10, 1); + List random = Arrays.asList(null, 0, 4, 2, 0); + Node head = new Node(0); + head = head.setHead(var, random); + solution.copyRandomList(head); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) +/* +// 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 { + public Node copyRandomList(Node head) { + if (head == null) { + return null; + } + Node clone = head; + while (clone != null) { + Node temp = new Node(clone.val); + temp.next = clone.next; + clone.next = temp; + clone = temp.next; + } + clone = head; + while (clone != null) { + if (clone.random != null) { + clone.next.random = clone.random.next; + } + clone = clone.next.next; + } + clone = head.next; + Node temp = head; + Node newHead = clone; + while (temp != null && newHead != null) { + if (temp.next.next != null) { + temp.next = temp.next.next; + newHead.next = newHead.next.next; + } else { + temp.next = null; + } + temp = temp.next; + newHead = newHead.next; + } + + return clone; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file