//复杂链表的赋值
#include <iostream>
using namespace std;
struct comListNode
{
int val;
comListNode *next;
comListNode *sib;
};
//第一步,复制原始链表的任一结点N,并创建新结点N‘,再把新结点N'连接到结点N后面
void CloneNode(comListNode *phead)
{
comListNode *pnode=phead;
while(pnode!=NULL)
{
comListNode *pcloned=new comListNode();
pcloned->val=pnode->val;//复制结点的值与原结点值相等
pclones->sib=NULL;
pcloned->next=pnode->next;//将复制结点插入原结点后面
pnode->next=pcloned;
pnode=pcloned->next;
}
}
//设置复制链表的sib
//复制结点的sib,是原结点的sib的下一结点
void Connectsib(comListNode *phead)
{
comListNode *pnode=phead;
while(pnode!=NULL)
{
comListNode *pcloned=pnode->next;
if(pnode->sib!=NULL)
{
pcloned->sib=pnode->sib->next;
}
pnode=pcloned->next;
}
}
//长链表的拆分
comListNode* ReconnectNode(comListNode *phead)
{
comListNode *pclonedhead=NULL;
comListNode *pcloned=NULL;
comListNode *pnode=phead;
if(pnode!=NULL)
{
pclonedhead=pcloned=pnode->next;//复制链表头结点
pnode->next=pcloned->next;//原链表的下一结点
pnode=pcloned->next;//更新原链表结点
}
while(pnode!=NULL)
{
pcloned->next=pnode->next;
pcloned=pcloned->next;//更新新链表结点
pnode->next=pcloned->next;
pnode=pcloned->next;
}
}
comListNode* Clone(comListNode* phead)
{
CloneNode(phead);
Connectsib(phead);
return ReconnectNode(phead);
}
剑指Offer-复制复杂链表
最新推荐文章于 2018-03-29 23:19:43 发布