您的位置:首页 > 运维架构

[LeetCode]Copy List with Random Pointer

2013-11-20 14:08 597 查看
/**
* 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) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(head == NULL) return NULL;
//1. copy and insert
RandomListNode* pCurNode = head;
while(pCurNode != NULL)
{
//copy
RandomListNode* tmp = new RandomListNode(pCurNode->label);
//insert
RandomListNode* pNextNode = pCurNode->next;
pCurNode->next = tmp;
tmp->next = pNextNode;
pCurNode = pNextNode;
}
//2. set random pointer of copied node
pCurNode = head;
while(pCurNode != NULL)
{
if(pCurNode->random != NULL)
pCurNode->next->random = pCurNode->random->next;
else
pCurNode->next->random = NULL;
pCurNode = pCurNode->next->next;
}
//3. split these two list
RandomListNode* newHead = head->next;
pCurNode = head;
while(pCurNode != NULL)
{
RandomListNode* pCopiedNode = pCurNode->next;
pCurNode->next = pCurNode->next->next;
if(pCurNode->next != NULL)
pCopiedNode->next = pCurNode->next->next;
else
pCopiedNode->next = NULL;
pCurNode = pCurNode->next;
}

return newHead;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: