剑指offer-26复杂链表的复制

来源:互联网 发布:王菲 蔡依林 知乎 编辑:程序博客网 时间:2024/06/05 16:43

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

/*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* Node=pHead;        //将链表的各个镜像节点插入每个原节点的后面        while(Node!=NULL)        {            RandomListNode* temp = new RandomListNode(Node->label);            temp->next=Node->next;            Node->next=temp;            Node=temp->next;        }        Node=pHead;        //将每个镜像节点的random指针设置为对应的镜像节点        while(Node!=NULL)        {            if(Node->random)            Node->next->random=Node->random->next;            Node=Node->next->next;        }        RandomListNode * clone=pHead->next;        RandomListNode * newHead=pHead->next;        Node=pHead;        //分拆2个链表        while(Node!=NULL)        {            //判断是否到了链表的最后一个非空节点            if(clone->next==NULL)            {                Node->next=NULL;                break;            }            Node->next=clone->next;            clone->next=Node->next->next;            clone=clone->next;            Node=Node->next;        }        return newHead;    }};


0 0