复杂链表的复制
程序员文章站
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;
}
好了,以上就是关于复杂链表的简单解题思路。