链表-leetcode 138. Copy List with Random Pointer

来源:互联网 发布:玩具出租软件 编辑:程序博客网 时间:2024/06/01 09:23

原题链接:Copy List With Random Pointer


题解:

/** * 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) {        /*        步骤:1.在每一个节点之后创建一个新节点,一一对应2.配置random,random->next->next就是新节点的random 3.还原新旧节点            Time Complexity:O(N)            Space Complexity:O(N)        */        if(!head)return NULL;        RandomListNode* res=head,*tmp=NULL;        RandomListNode* last=new RandomListNode(0);        while(head){            tmp=new RandomListNode(head->label);            tmp->next=head->next;            head->next=tmp;            head=head->next->next;        }        head=res;                last->next=head;        res=last;        while(head){            head->random!=NULL?head->next->random=head->random->next:head->next->random=NULL;            head=head->next->next;        }        head=res;        tmp=head->next;        while(head->next){            head->next=head->next->next;            head=head->next;            tmp->next=head->next;            tmp=tmp->next;                    }        head->next=NULL;        return res->next;}};


阅读全文
1 0
原创粉丝点击