剑指 Offer 35:复杂链表的复制
This commit is contained in:
parent
b5dc273d81
commit
291f33e26f
@ -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<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)
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user