第35题:LeetCode138. 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) {
    	RandomListNode* ptr=head;
    	RandomListNode* new_head=NULL;
    	std::vector<RandomListNode*> node_vec;
    	std::map<RandomListNode*,int>node_map;
        int i=0;
        
        while(ptr){
        	
        	node_map[ptr]=i;
        	node_vec.push_back(new RandomListNode(ptr->label));
        	
        	i++;
        	ptr=ptr->next;
		}
		
		ptr=head;
		node_vec.push_back(0);
		i=0;
		while(ptr){
			node_vec[i]->next=node_vec[i+1];
			if(ptr->random){
				int id=node_map[ptr->random];
				node_vec[i]->random=node_vec[id];
			}
			i++;
			ptr=ptr->next;
		}
		return node_vec[0];
    }
};

问题

posted @ 2019-02-14 23:50 lightmare 阅读(...) 评论(...) 编辑 收藏