/*
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;
// }
}