/**
* Definition for singly-linked list with a random pointer.
* class RandomListNode {
* int label;
* RandomListNode next, random;
* RandomListNode(int x) { this.label = x; }
* };
*/
public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
if(head==null){
return head;
}
RandomListNode newHead = new RandomListNode(head.label);
RandomListNode newP = new RandomListNode(head.label);
RandomListNode mid = head;
RandomListNode p=head;
while(p!=null){//是先复制节点,将链表变为原来的两倍长,每个节点的next都指向他的复制节点
newP = new RandomListNode(p.label);
mid = p.next;
p.next = newP;
newP.next = mid;
p=mid;
}
p=head;
while(p!=null){//在让复制的节点复制他的随机指针
if(p.random!=null)
p.next.random = p.random.next;
p=p.next.next;
}
p=head;
RandomListNode last = head.next;
while(p != null && p.next != null){//让复制节点脱离出链表
RandomListNode temp = p.next;
p.next = temp.next;
p = temp;
}
return last;
}
}
138. Copy List with Random Pointer
最新推荐文章于 2024-08-13 15:34:52 发布
本文介绍了一种复制带有随机指针的单链表的方法。该方法首先将原链表的每个节点复制,并插入到相应节点之后,再调整这些复制节点的随机指针,最后从原链表中分离出复制链表。
955

被折叠的 条评论
为什么被折叠?



