138. Copy List with Random Pointer

来源:互联网 发布:粉尘检测数据 编辑:程序博客网 时间:2024/05/16 17:18

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.

Subscribe to see which companies asked this question

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 head;        RandomListNode *p = head;        while(p != NULL)        {            RandomListNode *q = new RandomListNode(p->label);            q->random = p->random;            q->next = p->next;            p->next = q;            p = p->next->next;        }        p = head;        while(p != NULL)        {            if(p->random != NULL)            {                p->next->random = p->random->next;            }            p = p->next->next;        }        RandomListNode *ret = new RandomListNode(0);        ret->next = head;        RandomListNode *q = ret;        p = head;        while(p != NULL)        {            q->next = p->next;            p->next = q->next->next;            q = q->next;            p = p->next;        }        return ret->next;    }};
0 0
原创粉丝点击