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.
class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head)
{
if (0 == head) return 0;
RandomListNode* pHead = head;
while (0 != pHead)
{
RandomListNode* temp = new RandomListNode(pHead->label);
if (0 == temp) return 0;
temp->label = pHead->label;
temp->next = pHead->next;
pHead->next = temp;
pHead = temp->next;
}
pHead = head;
while(0 != pHead)
{
if (0 != pHead->random)
pHead->next->random = pHead->random->next;
pHead = pHead->next->next;
}
pHead = head->next;
RandomListNode* tempHead = pHead;
while (0 != head)
{
head->next = tempHead->next;
head = tempHead->next;
tempHead->next = (0 == head ? 0 : head->next);
tempHead = tempHead->next;
}
return pHead;
}
};
分离链表地方错误好多是修改了好几次才通过的,最后遇见一个大问题是 分配链表新节点时只能用new, malloc会错误,测试结果是很长一个链表,不能用RandomListNode* temp = (RandomListNode*)malloc(sizeof(RandomListNode));
RandomListNode* temp = new RandomListNode(pHead->label);
RandomListNode* temp = new RandomListNode(pHead->label);