题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
分析:
分为三步走:(1)给原来的链表的每个结点复制一个新节点并且插入到对应的后面 (2)利用老节点将新节点的random指针域置好 (3)将链表还原,即拆成完整的两个链表
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==nullptr)
return nullptr;
//第一步:复制链表结点
RandomListNode* oldnode=pHead;
while(oldnode)
{
RandomListNode* newnode = new RandomListNode(oldnode->label);//用老节点的值申请一个新节点
newnode->next=oldnode->next;//将新节点的next链上老节点的next
oldnode->next=newnode;//将新节点插在老节点后面
oldnode=oldnode->next->next;//由于已经插入了新节点,因此遍历下一个老节点得走2个next
}
//第二步:置信结点的random指