leet-code/LeetCode/src/main/java/leetcode/editor/cn/FuZaLianBiaoDeFuZhiLcof.java

129 lines
3.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//请实现 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<Integer> var = Arrays.asList(7, 13, 11, 10, 1);
List<Integer> 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)
}