The sword refers to Offer_Programming questions_25

Topic description

Input a complex linked list (there is a node value in each node, and two pointers, one points to the next node, and the other special pointer points to any node), and the returned result is the head of the complex linked list after replication. (Note, please do not return the node reference in the parameter in the output result, otherwise the problem judgment program will directly return empty)
/*
struct RandomListNode {
    int label;
    struct RandomListNode *next, *random;
    RandomListNode(int x) :
            label(x), next(NULL), random(NULL) {
    }
};
*/
class Solution {
public:
    RandomListNode* Clone(RandomListNode* pHead)
    {
        if(pHead == NULL){
            return NULL;
        }
        map<RandomListNode*,RandomListNode*>tmpMap;
        RandomListNode* p1 = NULL;
        RandomListNode* p2Head = NULL;
        RandomListNode * tmpHead = pHead;
        if(tmpHead){
            p1 = new RandomListNode(tmpHead->label);
            p2Head = p1;
            tmpMap[tmpHead] = p1;
            tmpHead = tmpHead->next;
        }
        while(tmpHead){
            RandomListNode* tmp = new RandomListNode(tmpHead->label);
            p1->next = tmp;
            p1 = tmp;
            tmpMap[tmpHead] = tmp;
            tmpHead = tmpHead->next;
        }
        tmpHead = pHead;
        map<RandomListNode*,RandomListNode*>::iterator it;
        map<RandomListNode*,RandomListNode*>::iterator it_random;
        while(tmpHead){
            if(tmpHead->random){
                it = tmpMap.find(tmpHead);
                if(it != tmpMap.end()){
                    it_random = tmpMap.find(tmpHead->random);
                    if(it_random != tmpMap.end()){
                        it->second->random = it_random->second;
                    }
                }
                
            }
            tmpHead = tmpHead->next;
        }
        return p2Head;
    }
};

  

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325303370&siteId=291194637