LeetCode 138. Copy List with Random Pointer

来源:互联网 发布:淘宝买家手机号提取 编辑:程序博客网 时间:2024/04/28 04:35

deep copy:深拷贝,涉及到指针的时候的概念,如果只是简单的将指针的值复制给另一个指针变量,叫浅拷贝,若是创建一个新的空间,并且将指针的地址值指向的值复制给创建的新空间,就叫深拷贝。

解题思路:首先不去管random,创建一条新的链表,新链表中的节点中label的值和旧链表中的值相同而且位置也相同,建立一个map<RandomListNode *,RandomListNode*>,记录新链表和旧链表的对应关系。 然后遍历链表将random的值根据旧链表中random的值和map中的对应关系赋值。

class Solution {

public:
    RandomListNode *copyRandomList(RandomListNode *head) {
        if(head==NULL)
        {
            return NULL;
        }
        map<RandomListNode *,RandomListNode*> m;
        map<RandomListNode *,RandomListNode*>::iterator it;
        RandomListNode *p=head;
        RandomListNode *q=new RandomListNode(head->label);
        RandomListNode *e=q;
        m.insert(map<RandomListNode *,RandomListNode*>::value_type(p,q));
        p=p->next;
        while(p!=NULL)
        {
            RandomListNode *l=new RandomListNode(p->label);
            e->next=l;
            m.insert(map<RandomListNode *,RandomListNode*>::value_type(p,l));
            p=p->next;
            e=l;
        }
        e->next=NULL;
        e=q;
        p=head;
        while(e!=NULL)
        {
            if(p->random==NULL)
            {
                e->random=NULL;
            }
            if(p->random!=NULL)
            {
                it=m.find(p->random);
                e->random=it->second;
            }
            e=e->next;
            p=p->next;
        }
        return q;
    }
};
0 0
原创粉丝点击