【面试准备】letcode-Copy List with Random Pointer

来源:互联网 发布:广告公司源码 编辑:程序博客网 时间:2024/06/05 08:31
参照http://www.cnblogs.com/easonliu/p/3647160.html
/** * 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* p1 = head;        RandomListNode* p2 = head->next;                while(p1 != NULL){            p1->next = new RandomListNode(p1->label);            p1->next->next = p2;            p1 = p2;            if(p1 != NULL){                p2 = p1->next;            }        }        p1 = head;        p2 = head->next;        while(p1 != NULL){            if(p1->random == NULL){                p2->random = NULL;            }else{                p2->random = p1->random->next;            }            p1 = p2->next;            if(p1 != NULL){                p2 = p1->next;            }        }        RandomListNode* ans = head->next;        p1 = head;        p2 = head->next;        while(p2 != NULL){            p1->next = p2->next;            p1 = p2;            if(p2 != NULL){                p2 = p2->next;            }        }        p1->next = NULL;        return ans;    }};

0 0
原创粉丝点击