剑指Offer25 复杂链表的复制 JAVA实现
刚开始是真的不知道什么是复杂链表,之后上网搜了一下这个题要怎么解,后面参考了
浅谈复杂链表的复制
才知道是什么,有兴趣的可以去看一下,然后他那边是采用C++写的,而我把它转为JAVA,因为怕自己忘记了,所以记录下来。
可以先去看那篇博客 写的很清晰,只有最后一段的程序,没有写怎么分离的。
我在代码里是这样实现的
RandomListNode s = pHead.next;
RandomListNode s1 = pHead;
RandomListNode temp = null;
while(s1.next!=null){
temp = s1.next;
s1.next = temp.next;
s1 = temp;
}
return s;
实现原理
最后一定要注意!
while(s1.next!=null)代码中最后一个循环,用的是s1.next != null,当输入为空时呢?
因此要在函数最开始的地方,加一个临界条件判断 if(pHead == null) return null;
最后上代码
/*
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 p = pHead;
RandomListNode q = pHead;
//复制成为 A A` B B`...
while(p!=null){
RandomListNode cpNode = new RandomListNode(p.label);
cpNode.next = p.next;
p.next = cpNode;
p = cpNode.next;
}
while(q!=null){
RandomListNode t = q.next;
if(q.random != null){
t.random = q.random.next;
}
q = t.next;
}
RandomListNode s = pHead.next;
RandomListNode s1 = pHead;
RandomListNode temp = null;
while(s1.next!=null){
temp = s1.next;
s1.next = temp.next;
s1 = temp;
}
return s;
}
}
好好学习,天天向上。