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.
这题貌似见过,大概是编程之美之类吧。
复习一下深拷贝和浅拷贝的区别:
深拷贝保存了指针指向的内容,二浅拷贝应对指针指示给指针赋值。
所以对于有指针的地方,浅拷贝非常不安全。
这段代码用了2个栈,感觉很不效率,空间O(n)。
有个空间O(1)的。

/**
* 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) {
stack<RandomListNode *> sk;
stack<RandomListNode *> sk2;
if(head == NULL)return NULL;
RandomListNode *temp = head;
RandomListNode *cp = new RandomListNode (0);
RandomListNode *cpp = cp;
while(temp != NULL)
{
int val = temp->label;
RandomListNode* node = new RandomListNode(val);
cpp->next = node;
cpp = node;
sk.push(temp);
temp = temp ->next;
sk.top()->next = cpp;
}
while(! sk.empty())
{
temp =sk.top();
if(temp->random != NULL)
temp->next->random = temp->random->next;
sk2.push(temp);
sk.pop();
}
while(! sk2.empty())
{
temp = sk2.top();
sk2.pop();
if(sk2.empty())temp->next =NULL;
else
{
temp->next =sk2.top();
}
}
return cp->next;
}
};
posted on 2014-03-26 19:57 pengyu2003 阅读(122) 评论(0) 收藏 举报
浙公网安备 33010602011771号