A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
题意
一个链表包含额外的随机指针,这个指针指向任意节点或空。
复制这个链表。
题解
分三步:
1、复制链表值及顺序,我这里使用的方法是在每个节点后加一个一样的节点
2、复制random指针,因为第一步中,拷贝的节点放在当前结点后面,所以可以这么实现 cur->next->random=cur->random->next
3、把两个链表分开即可。
/**
* Definition for singly-linked list with a random pointer.
* struct RandomListNode {
* int label;
* RandomListNode *next, *random;
* RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
* };
*/
class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
for(RandomListNode *cur=head;cur;)
{
RandomListNode *node=new RandomListNode(cur->label);
node->next=cur->next;
cur->next=node;
cur=node->next;
}
for(RandomListNode *cur=head;cur;)
{
if(cur->random!=NULL)
cur->next->random=cur->random->next;
cur=cur->next->next;
}
RandomListNode newhead(-1);
for(RandomListNode *cur=head,*newlist=&newhead;cur;)
{
newlist->next=cur->next;
cur->next=cur->next->next;
newlist=newlist->next;
cur=cur->next;
}
return newhead.next;
}
};