剑指 Offer-JZ25-复杂链表的复制

    技术2022-07-12  75

    题目描述

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

    解题思路

    代码实现

    /* 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* pCurrNode = pHead; while(pCurrNode != NULL){ RandomListNode* pCurrNodeCloned = new RandomListNode(pCurrNode->label); pCurrNodeCloned->next = pCurrNode->next; pCurrNode->next = pCurrNodeCloned; pCurrNode = pCurrNode->next->next; } pCurrNode = pHead; while(pCurrNode != NULL){ pCurrNode->next->random = pCurrNode->random == NULL ? NULL : pCurrNode->random->next; pCurrNode = pCurrNode->next->next; } pCurrNode = pHead; RandomListNode* pHeadCloned = pHead->next; while(pCurrNode != NULL){ RandomListNode* pCurrNodeCloned = pCurrNode->next; pCurrNode->next = pCurrNodeCloned->next; pCurrNodeCloned->next = pCurrNodeCloned->next == NULL ? NULL : pCurrNodeCloned->next->next; pCurrNode = pCurrNode->next; } return pHeadCloned; } };

    运行结果

    运行时间:4ms 占用内存:504k

    Processed: 0.015, SQL: 9