题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
思路:
1、复制原链表
2、从原链表表头开始,查询每个节点的random指针指向,同时移动复制链表的指针,当找到时,移动的指针次数是一样的,
则复制链表的random指针为移动的指针
/*
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(null == pHead){
return null;
}else{
RandomListNode temp1 = pHead;
RandomListNode head = null;
RandomListNode tail = null;
RandomListNode temp = null;
while(temp1!=null){
if(head == null){
head = new RandomListNode(temp1.label);
tail = head;
}else{
temp = new RandomListNode(temp1.label);
tail.next = temp;
tail = temp;
}
temp1 = temp1.next;
}
temp1 = pHead;
RandomListNode temp2 = pHead;
temp = head;
RandomListNode temp0 = head;
while(temp2!=null){
while(temp2.random != temp1){
temp1 = temp1.next;
temp0 = temp0.next;
}
temp.random = temp0;
temp2 = temp2.next;
temp = temp.next;
temp1 = pHead;
temp0 = head;
}
return head;
}
}
}