您的位置:首页 > 运维架构

Copy List with Random Pointer

2015-06-01 00:51 399 查看
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.
/**
* 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) {
if (head == NULL)
{
return NULL;
}

RandomListNode *p = head;
RandomListNode *newHead = NULL;
RandomListNode *q = NULL;
//创建新链表的节点,原链表的next指向对应新链表的节点,
//对应新链表的节点的next指向原链表对应节点的next.
while (p != NULL)
{
q = new RandomListNode(p->label);
q->next = p->next;
p->next = q;
p = q->next;
if (newHead == NULL)
{
newHead = q;
}
}

p = head;
q = newHead;
//建立新链表的random
while (p != NULL)
{
if (p->random == NULL)
{
q->random = NULL;
}
else
{
q->random = p->random->next;
}
p = q->next;
if (p != NULL)
{
q = p->next;
}
}

p = head;
q = newHead;
//恢复原链表的next,并建立新链表的next.
while (p != NULL)
{
p->next = q->next;
p = p->next;
if (p != NULL)
{
q->next = p->next;
q = q->next;
}
}

return newHead;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: