/*
public class RandomListNode {
int label;
RandomListNode next = null;
RandomListNode random = null;
RandomListNode(int label) {
this.label = label;
}
}
*/
public class Solution {
public RandomListNode Clone(RandomListNode pHead) {
if(pHead == null) return pHead;
// 1.将拷贝节点放到原节点后面,例如1->2->3这样的链表就变成了这样1->1'->2->2'->3->3'
for (RandomListNode p = pHead, copy = null; p != null; p = p.next.next) {
copy = new RandomListNode(p.label);
copy.next = p.next;
p.next = copy;
}
// 2.把拷贝节点的random指针安排上
for (RandomListNode p = pHead; p != null; p = p.next.next) {
if (p.random != null) {
p.next.random = p.random.next;
}
}
// 3.分离拷贝节点和原节点,变成1->2->3和1'->2'->3'两个链表,后者就是答案
RandomListNode newHead = pHead.next;
for (RandomListNode p = pHead, temp = null; p != null && p.next != null;) {
temp = p.next;
p.next = temp.next;
p = temp;
}
return newHead;
}
// private void clone(RandomListNode pHead){
// RandomListNode p = pHead;
// while(p!=null){
// RandomListNode clone= new RandomListNode(p.label);
// clone.next=p.next;
// clone.random=null;
// p.next=clone;
// p=clone.next;
// }
// }
// private void cloneRandom(RandomListNode pHead){
// RandomListNode p = pHead;
// while(p!=null){
// RandomListNode clone= p.next;
// if(p.random!=null){
// clone.random=p.random.next;
// }
// p=clone.next;
// }
// }
// private RandomListNode divide(RandomListNode head){
// RandomListNode cloneNode = head.next;
// RandomListNode cloneHead = cloneNode;
// head.next=cloneNode;
// head=head.next;
// while(head!=null){
// cloneNode.next=head.next;
// head.next=head.next.next;
// head=head.next;
// cloneNode=cloneNode.next;
// }
// return cloneHead;
// }
}
JZ35 复杂链表的复制
原创
©著作权归作者所有:来自51CTO博客作者孙中明的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
LeetCode(剑指 Offer)- 35. 复杂链表的复制
题目链接:点击打开链接题目大意:略。解题思路:解决方案(2)解析。相关企业字节跳动 亚
35. 复杂链表的复制 LeetCode Java C++ 剑指 Offer 解题 算法 力扣 -
java Process指定目录下 java processbuilder
最近由于工作需要把用户配置的Hive命令在Linux环境下执行,专门做了一个用户管理界面特地研究了这个不经常用得ProcessBuilder类。所以把自己的学习的资料总结一下。 一、概述 ProcessBuilder类是J
java Process指定目录下 java 操作系统 runtime 生成器