复杂链表的复制

来源:互联网 发布:红色歌曲 知乎 编辑:程序博客网 时间:2024/05/06 07:28
//复杂链表的复制#include<iostream>#include<vector>using namespace std;struct complexNode{char value;complexNode *pNext;complexNode *pOther;};complexNode * copyComplexList(complexNode *pHead){if(pHead==NULL){return NULL;}if(pHead->pNext==NULL){complexNode *pHead_copy=new complexNode;pHead_copy->pNext=pHead_copy->pOther=NULL;return pHead_copy;}//第一步在每个结点的后面插入一个copyfor(complexNode *pNode=pHead;pNode!=NULL;pNode=pNode->pNext->pNext){complexNode *pNodeCopy=new complexNode;pNodeCopy->value=pNode->value;pNodeCopy->pNext=pNode->pNext;pNodeCopy->pOther=NULL;pNode->pNext=pNodeCopy;}//第二步  '遍历'扩充后的链表,设置copy结点的pOtherfor(complexNode *pNode=pHead;pNode!=NULL;pNode=pNode->pNext->pNext){if(pNode->pOther)pNode->pNext->pOther=pNode->pOther->pNext;elsepNode->pNext->pOther=NULL;}//第三步  拆分链表complexNode *pHead_copy=pHead->pNext;for(complexNode *pNode=pHead;pNode!=NULL;){complexNode *pTmp=pNode->pNext;if(pTmp){pNode->pNext=pNode->pNext->pNext;}pNode=pTmp;}return pHead_copy;}int main(){complexNode n1,n2,n3,n4,n5;n1.value='A',n2.value='B',n3.value='C',n4.value='D',n5.value='E';n1.pNext=&n2,n2.pNext=&n3,n3.pNext=&n4,n4.pNext=&n5,n5.pNext=NULL;n1.pOther=&n3,n2.pOther=&n5,n3.pOther=NULL,n4.pOther=&n2,n5.pOther=NULL;complexNode *pHead=&n1;complexNode *pHead_copy=copyComplexList(pHead);return 0;}

0 0
原创粉丝点击