题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
思路:
注意:在拆分的过程中要还原原链表的状态
代码实现:
RandomListNode* Clone(RandomListNode* pHead)
{
if (pHead == NULL)return NULL;
RandomListNode*m = pHead;
while (m) {
RandomListNode*p = new RandomListNode(m->label);
p->next = m->next;
m->next = p;
m = p->next;
}
m = pHead;
while (m) {
if (m->random) {
m->next->random = m->random->next;
}
else {
m->next->random = NULL;
}
m = m->next->next;
}
m = pHead;
RandomListNode*res = m->next;
while (m) {
RandomListNode*p = m->next->next;
if (p) {
m->next->next = p->next;
}
else { m->next -> next = NULL; }
m->next = p;
m = p;
}
return res;
}