题目:
解题思路:
代码实现:java
/*
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 null;
}
RandomListNode currentNode = pHead;
//1.复制每个节点,并放到当前节点后边
while(currentNode!=null){
//复制当前节点
RandomListNode cloneNode=new RandomListNode(currentNode.label);
//将当前点的下一个节点的值赋值为nextNode
RandomListNode nextNode=currentNode.next;
//将当前节点的next指针指向复制的节点
currentNode.next=cloneNode;
//将复制的节点的next指针指向当前节点的下一个节点
cloneNode.next=nextNode;
//将下一个节点赋值为当前节点进行遍历
currentNode=nextNode;
}
currentNode = pHead;
//2.重新遍历链表,复制老节点的随机指针给新节点
while(currentNode!=null){
//将当前点的next的random指针指向当前点的random指针指向 的next节点即复制节点
currentNode.next.random=currentNode.random==null?null:currentNode.random.next;
currentNode=currentNode.next.next;
}
currentNode = pHead;
//3.根据奇偶位置拆分链表,将链表分为原链表和复制后的链表
RandomListNode pcloneHead = pHead.next;
while(currentNode!= null){
RandomListNode cloneNode = currentNode.next;
currentNode.next=cloneNode.next;
cloneNode.next=currentNode.next==null?null:currentNode.next.next;
currentNode=currentNode.next;
}
return pcloneHead;
}
}