欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

复杂链表的复制

程序员文章站 2022-06-11 20:16:10
...

在学习链表的相关知识时,碰到了这样一道题,是关于复杂链表的复制问题的,每个节点不仅有指向下一个节点的next指针,还要一个随机指针random,这个随机指针可能会指向任何一个节点,那么对于这道题最好的解决方法是什么呢:
解题思路:
复杂链表的复制
所以我们可以实现三个函数来解决这个问题,具体代码如下:

RandomListNode* Clone(RandomListNode* pHead)
    {
        CloneNodes(pHead);
        CloneRandom(pHead);
        return ReConnectNodes(pHead);
    }
     //复制节点
    void CloneNodes(RandomListNode* pHead){
        RandomListNode* pCloned;
        while(pHead!=NULL){
            pCloned=new RandomListNode(pHead->label);
            pCloned->next=pHead->next;
            pHead->next=pCloned;
            pHead=pCloned->next;
        }
    }
     //连接random指针
    void CloneRandom(RandomListNode* pHead){
        RandomListNode* pCloned;
        while(pHead!=NULL){
            pCloned=pHead->next;
            if(pHead->random!=NULL){
                pCloned->random=pHead->random->next;
            }
            pHead=pCloned->next;
        }
    }
     //链表分离
    RandomListNode* ReConnectNodes(RandomListNode* pHead){
        RandomListNode* pClonedHead=NULL;
        RandomListNode* pClonedNode=NULL;
        RandomListNode* pNode=pHead;

        if(pNode!=NULL){
            pClonedHead=pClonedNode=pNode->next;
            pNode->next=pClonedNode->next;
            pNode=pNode->next;
        }

        while(pNode!=NULL){
            pClonedNode->next=pNode->next;
            pClonedNode=pClonedNode->next;
            pNode->next=pClonedNode->next;
            pNode=pNode->next;
        }
        return pClonedHead;
    }

好了,以上就是关于复杂链表的简单解题思路。

相关标签: 复杂链表复制

上一篇: Unit Test

下一篇: 复杂链表的复制