题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
思路:
1、在原链表上面复制,新节点连到相同的老结点后面;
2、复制随机指针,老结点的随机指针(老结点后面的结点的随机指针指向,老结点随机指针所指节点的下一个结点)
3、将两个链表分离,返回头指针;
代码如下:
RandomListNode* Clone(RandomListNode* pHead){
if(pHead == NULL)return NULL;
RandomListNode* currNode = pHead;
while(currNode){
RandomListNode* node = new RandomListNode(currNode->label);
node->next = currNode->next;
currNode->next = node;
currNode = node->next;
}
currNode = pHead;
while(currNode){
RandomListNode* node = currNode->next;
if(currNode->random){
node->random = currNode->random;
}
currNode = node->next;
}
RandomListNode* pHead_Clone = pHead->next;
RandomListNode* p;
currNode = pHead;
while(currNode->next){
p = currNode->next;
currNode->next = p->next;
currNode = p;
}
return pHead_Clone;
}