/**
* 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;
}
};
[LeetCode]Copy List with Random Pointer
最新推荐文章于 2021-07-22 01:11:40 发布