首页 > 代码库 > Copy List with Random Pointer

Copy List with Random Pointer

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 *h = head;        while(h){            RandomListNode *node = new RandomListNode(h->label);            node->next = h->next;            h->next = node;            h = h->next->next;        }        h = head;        while(h){            if(h->random)                h->next->random = h->random->next;            h = h->next->next;        }        RandomListNode *ans, *tmp;        h = head;        tmp = h->next;        ans = tmp;        h->next = h->next->next;        h = h->next;        while(h){            tmp->next = h->next;            h->next = h->next->next;            tmp = tmp->next;            h = h->next;        }        return ans;    }};

 

Copy List with Random Pointer