剑指offer|复杂链表的复制

来源:互联网 发布:跑步轨迹软件 编辑:程序博客网 时间:2024/05/16 17:17

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

思路:

首先遍历一遍链表,复制每一个结点,并把它放在原来结点的后面。然后再遍历一遍链表赋值原始结点的特殊指针。最后遍历一遍链表把原始结点和复制的结点拆分开来。

class Solution {public:    RandomListNode* Clone(RandomListNode* pHead)    {        RandomListNode* pNode=pHead;        if(pHead == nullptr)            return pNode;        while(pNode != nullptr)        {            RandomListNode *temp=new RandomListNode(pNode->label);            //temp->label=pNode->label;            temp->next=pNode->next;            pNode->next=temp;            pNode=temp->next;        }        pNode=pHead;        while(pNode != nullptr)        {            if(pNode->random)                pNode->next->random=pNode->random->next;            pNode=pNode->next->next;        }        RandomListNode* pNewHead=pHead->next;        pNode=pNewHead;        RandomListNode* pBehind=pHead;        while(pNode != nullptr)        {            pBehind->next=pNode->next;            if(pNode->next != nullptr)            {                pNode->next=pNode->next->next;            }            pNode=pNode->next;            pBehind=pBehind->next;        }        return pNewHead;    }};
0 0
原创粉丝点击