package java2019;
import java.util.Random;
//输入一个复杂链表,返回结果为复制后复杂链表的head
public class Demo23 {
//1.复制节点
//2.初始化新节点
//3.拆分旧链表和新链表
public RandomListNode Clon(RandomListNode pHead){
if(pHead == null)
return null;
RandomListNode currentNode = pHead;
while(currentNode!=null){
RandomListNode cloneNode = new RandomListNode(currentNode.val);
RandomListNode nextNode = currentNode.next;
currentNode.next = cloneNode;
cloneNode.next = nextNode;
currentNode = nextNode;
}
currentNode = pHead;
while(currentNode!=null){
currentNode.next.random=
currentNode.random==null?null:currentNode.random.next;
currentNode = currentNode.next.next;
}
currentNode = pHead;
RandomListNode pCloneHead = pHead.next;
while(currentNode!=null){
RandomListNode cloneNode = currentNode.next;
currentNode.next = cloneNode.next;
cloneNode.next=cloneNode.next==null?null:cloneNode.next.next;
currentNode = currentNode.next;
}
return pCloneHead;
}
public static void main(String[] args) {
RandomListNode root = new RandomListNode(1);
RandomListNode n1 = new RandomListNode(3);
RandomListNode n2 = new RandomListNode(2);
RandomListNode n3 = new RandomListNode(7);
RandomListNode n4 = new RandomListNode(6);
RandomListNode n5 = new RandomListNode(5);
RandomListNode n6 = new RandomListNode(7);
root.next=n1;
n1.next=n2;
n2.next=n3;
n3.next=n4;
n4.next=n5;
n5.next=n6;
//n6.random=root;
Demo23 d23 = new Demo23();
RandomListNode testNode = d23.Clon(root);
while(testNode != null){
System.out.println(testNode.val);
testNode = testNode.next;
}
}
}
23.输入一个复杂链表,返回结果为复制后复杂链表的head
最新推荐文章于 2020-12-01 22:18:39 发布