题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
解题思路
代码实现
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
转载请注明原文地址:https://ipadbbs.8miu.com/read-22957.html