剑指Offer-复制复杂链表
2016-08-22 11:00
471 查看
//复杂链表的赋值 #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 - 九度1524 - 复杂链表的复制
- 剑指Offer--复杂链表的复制
- 剑指offer 面试题26复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer:复杂链表的复制
- (十八)剑指offer之复杂链表的复制
- [剑指offer]复杂链表的复制
- 剑指offer——复杂链表的复制_
- 【剑指offer】第三十四题(二叉树中和尾某一值的路径) 和 第三十五题(复杂链表的复制)
- 剑指offer---复杂链表复制
- 剑指offer: 复杂链表的复制
- 【剑指offer】复杂链表的复制
- 【剑指offer】面试题26:复杂链表的复制
- 剑指offer面试题[26]-复杂链表的复制
- 剑指offer——面试题26:复杂链表的复制
- [剑指offer][面试题26]复杂链表的复制
- 剑指offer--面试题26:复杂链表的复制
- 剑指offer-面试题26 复杂链表的复制
- 剑指offer:复杂链表的复制(java)
- 剑指offer——复杂链表的复制(还不错,空间优先法和时间优先法)