复杂链表的复制

来源:互联网 发布:知乎费县夫妻刑警笔录 编辑:程序博客网 时间:2024/06/05 02:44

复杂链表的复制

复杂链表定义: 在复杂链表中,每个节点除了有一个_pnext指针指向 下一个结点外,还有一个_pSibling指向链表的任意节点或者NULL.(如下图所示)

备注:橙黄箭头代表_pnext指针,深蓝箭头代表_pSibling指针。

任务一:创建复杂链表

//节点定义struct ComplexListNode{ComplexListNode(int x):_value(x),_pnext(NULL),_pSibling(NULL){}    int _value;ComplexListNode *_pnext;ComplexListNode *_pSibling;}*Phead;//复杂链表简单创建ComplexListNode* CreatList(){ComplexListNode* head=new ComplexListNode(0);ComplexListNode* node1=new ComplexListNode(1);ComplexListNode* node2=new ComplexListNode(3);ComplexListNode* node3=new ComplexListNode(5);ComplexListNode* node4=new ComplexListNode(7);ComplexListNode* node5=new ComplexListNode(9);head=node1;node1->_pnext=node2;node2->_pnext=node3;node3->_pnext=node4;node4->_pnext=node5;node5->_pnext=NULL;node1->_pSibling=node3;node2->_pSibling=node5;node3->_pSibling=NULL;node4->_pSibling=node2;node5->_pSibling=NULL;return head;}


任务二:创建新节点

思路:复制原来链表每个节点,并把每个新节点用_pnext指针将旧节点连接;如果原来链表的一个节点的_pSibling指向原链表某一个节点,则它对应的新节点的_pSibling指向某一节点的下一个节点。

//复制_pnext域ComplexListNode*  CopyNodes(ComplexListNode* Phead){ComplexListNode* cur=Phead;while(cur){ComplexListNode* copynode=new ComplexListNode(0);copynode->_value=cur->_value;if(cur->_pnext!=NULL){copynode->_pnext=cur->_pnext;}else{copynode->_pnext=NULL;}copynode->_pSibling=NULL;cur->_pnext=copynode;cur=copynode->_pnext; }return Phead;}

//复制_pSibling域ComplexListNode* CopySibNodes(ComplexListNode* Phead){ComplexListNode* cur=Phead;while(cur){ComplexListNode* copynode=cur->_pnext;if(cur->_pSibling)   {copynode->_pSibling=cur->_pSibling->_pnext;}cur=copynode->_pnext;}return Phead;}

任务三:长链表变成两个链表

ComplexListNode* CopyComplexList(ComplexListNode* Phead){ComplexListNode* cur=Phead;ComplexListNode* copynode=new ComplexListNode(0);ComplexListNode* Phead1=new ComplexListNode(0);if(cur!=NULL){Phead1=copynode=cur->_pnext;cur->_pnext=copynode->_pnext;cur=cur->_pnext;}while(cur){copynode->_pnext=cur->_pnext;   //关键1步copynode=copynode->_pnext;cur->_pnext=copynode->_pnext;cur=cur->_pnext;}return  Phead1;}

就这样,复杂链表的复制完成了,小编要和大家说再见了!再见

0 0
原创粉丝点击