您的位置:首页 > Web前端 > Node.js

CopyComplexNodes

2016-08-28 11:15 274 查看
#include<stdio.h>
struct ComplexNode{
int value;
ComplexNode* next;
ComplexNode* sibling;
};
ComplexNode* CreateComplexNode(int value){
ComplexNode* p=new ComplexNode();
p->value=value;
p->next=NULL;
p->sibling=NULL;
return p;
}
void BuildNodes(ComplexNode* curr,ComplexNode* next,ComplexNode* sibling){
if(curr!=NULL){
curr->next=next;
curr->sibling=sibling;
}
}
void PrintNodes(ComplexNode* head){
ComplexNode* p=head;
while(p){
printf("节点的值为%3d",p->value);
if(p->sibling!=NULL)
printf("节点的兄弟节点为%3d\n",p->sibling->value);
else printf("\n");
p=p->next;
}

}
void CloneNodes(ComplexNode* head){
ComplexNode* p=head;
while(p){
ComplexNode* pClone=new ComplexNode();
pClone->value=p->value;
pClone->next=p->next;
pClone->sibling=NULL;
p->next=pClone;
p=pClone->next;
}
}
void ConnectSiblingNodes(ComplexNode* head){
ComplexNode* p=head;
while(p){
ComplexNode* pClone=p->next;
if(p->sibling!=NULL){
ComplexNode* pSibling=p->sibling;
pClone->sibling=pSibling->next;
}
p=pClone->next;
}
}
ComplexNode* ReconnectCloneNodes(ComplexNode* head){
if(head==NULL)
return NULL;
ComplexNode* p=head;
ComplexNode* pClone;
ComplexNode* cloneHead=p->next;
pClone=cloneHead;
p->next=pClone->next;
p=pClone->next;
while(p){
pClone->next=p->next;
pClone=p->next;
p->next=pClone->next;
p=pClone->next;
}
return cloneHead;
}
ComplexNode* clone(ComplexNode* pHead){
CloneNodes(pHead);
ConnectSiblingNodes(pHead);
return ReconnectCloneNodes(pHead);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: