由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求救! Copy List With Random Pointer总是超时
相关主题
Leetcode新题 Copy List with Random Pointercopy link with random additional pointers
请教下copy list with random pointerreverse random pointers of a single linked list
哪位大侠帮我看看这个code弱问一个小问题,leetcode 上merge sorted list
Leetcode Copy List with Random Pointer Runtime Error?c/c++ double pointer研究
各位刷友,leetcode里的题目:Copy List with Random Pointer问个题,用递归方法
copy list with random pointer 老出错一道linked list编程题
请问大牛们如何提高解决leetcode上面Linkedlist的题的能力?amazon onsite 面经
leetcode Copy List with Random Pointer一道挺简单的题给搞砸了
相关话题的讨论汇总
话题: dfsoldhead话题: random话题: null话题: node
进入JobHunting版参与讨论
1 (共1页)
e*******s
发帖数: 1979
1
Copy List with Random Pointer
A linked list is given such that each node contains an additional random
pointer which could point to any node in the list or null.
Return a deep copy of the list.
下面注释里面是别人写的能跑过的 上面的是我的 到现在都改得几乎一模一样了
可是还是超时
/**
* 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) {

unordered_map myMap;

if (NULL == head) return NULL;

RandomListNode* myhead = NULL;

DFS(head,myhead,myMap);

return myhead;

}

void *DFS(RandomListNode *DFSOldHead, RandomListNode *&DFSMyHead,
unordered_map DFSmyMap){

if (NULL == DFSOldHead) return NULL;

DFSMyHead = new RandomListNode(DFSOldHead->label);

if( DFSmyMap.find(DFSOldHead) == DFSmyMap.end() ){

DFSmyMap[DFSOldHead] = DFSMyHead;

}

if (DFSOldHead -> next){

if (DFSmyMap.end() == DFSmyMap.find(DFSOldHead -> next)){

DFS(DFSOldHead -> next, DFSMyHead->next, DFSmyMap);

}

else{

DFSMyHead -> next = DFSmyMap[DFSOldHead -> next];
}
}

if (DFSOldHead -> random){

if (DFSmyMap.end() == DFSmyMap.find(DFSOldHead -> random)){

DFS(DFSOldHead -> random, DFSMyHead->random, DFSmyMap);

}
else{

DFSMyHead -> random = DFSmyMap[DFSOldHead -> random];

}

}

}

};
/*
class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
// Note: The Solution object is instantiated only once and is reused
by each test case.
if( head==NULL ) return NULL;
RandomListNode* newHead = NULL;
unordered_map< RandomListNode*, RandomListNode* > occur;
dfs( newHead, head, occur );
return newHead;
}
void dfs( RandomListNode*&cur, RandomListNode* node, unordered_map<
RandomListNode*, RandomListNode* >& occur ){
if( node==NULL ) return;
cur = new RandomListNode( node->label );
if( occur.find(node) == occur.end() ){
occur[node] = cur;
}
if( node->next ){
if( occur.find(node->next)==occur.end() ){
dfs( cur->next, node->next, occur );
}else{
cur->next = occur[node->next];
}
}
if( node->random ){
if( occur.find(node->random)==occur.end() ){
dfs( cur->random, node->random, occur );
}else{
cur->random = occur[node->random];
}
}
}
};
*/
e*******s
发帖数: 1979
2
这么快就沉了。。
up

【在 e*******s 的大作中提到】
: Copy List with Random Pointer
: A linked list is given such that each node contains an additional random
: pointer which could point to any node in the list or null.
: Return a deep copy of the list.
: 下面注释里面是别人写的能跑过的 上面的是我的 到现在都改得几乎一模一样了
: 可是还是超时
: /**
: * Definition for singly-linked list with a random pointer.
: * struct RandomListNode {
: * int label;

1 (共1页)
进入JobHunting版参与讨论
相关主题
一道挺简单的题给搞砸了各位刷友,leetcode里的题目:Copy List with Random Pointer
yelp 面经copy list with random pointer 老出错
问个reverse linked list请问大牛们如何提高解决leetcode上面Linkedlist的题的能力?
合并两个排序好的链表, 优解?leetcode Copy List with Random Pointer
Leetcode新题 Copy List with Random Pointercopy link with random additional pointers
请教下copy list with random pointerreverse random pointers of a single linked list
哪位大侠帮我看看这个code弱问一个小问题,leetcode 上merge sorted list
Leetcode Copy List with Random Pointer Runtime Error?c/c++ double pointer研究
相关话题的讨论汇总
话题: dfsoldhead话题: random话题: null话题: node