复杂链表的复制

    xiaoxiao2023-10-27  166

    题目描述

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

    思路

    第一步:遍历链表,复制每一个结点,并将复制的结点连接在原结点后面(复制next指针) 第二步:遍历链表,判断结点特殊指针是否为空,如果不为空,则将该结点特殊指针连接的结点的下一个结点(特殊指针所连结点的复制结点)连接到该结点的下一个结点(该结点的复制结点)的后面(复制特殊指针)。 第三步:分离原结点与复制结点,返回复制结点首结点的指针。

    代码(c++)

    /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { } }; */ class Solution { public: RandomListNode* Clone(RandomListNode* pHead) { if(pHead==NULL) return NULL; RandomListNode* p=pHead; while(p!=NULL){ RandomListNode* temp=new RandomListNode(p->label); temp->next=p->next; p->next=temp; p=temp->next; } p=pHead; while(p!=NULL){ if(p->random!=NULL){ p->next->random=p->random->next; } p=p->next->next; } RandomListNode* Head=pHead->next; p=pHead; RandomListNode* q=Head; while(q!=NULL){ p->next=q->next; p=p->next; if(p==NULL) break; q->next=p->next; q=q->next; } return Head; } };
    最新回复(0)