#include"wz.h"
struct ComplexNode{ int value; ComplexNode* pNext; ComplexNode* pSibling;};
void deleteList(ComplexNode* pHead)
{ while(pHead!=NULL)
{ ComplexNode* pNext = pHead->pNext; delete pHead; pHead = pNext; }
}
void Con(ComplexNode* pHead)
{
ComplexNode* pNode = pHead;
while(pNode != NULL)
{
ComplexNode *pCloned = pNode->pNext;
if(pNode->pSibling != NULL)
{
pCloned->pSibling = pNode->pSibling->pNext;
}
pNode = pCloned->pNext;
}
}
void print(ComplexNode* pHead)
{ ComplexNode* p=pHead;
while(p) { cout<<p->value<<" "; p=p->pNext;}
cout<<endl;
}
ComplexNode* myClone2(ComplexNode* pHead)
{
ComplexNode*p= new ComplexNode;
ComplexNode*q= NULL;
ComplexNode*newhead= NULL;
if(pHead)
{ p=pHead;
while(p->pNext)
{
ComplexNode*add= new ComplexNode;
add->value=p->value;
add->pSibling=NULL;add->pNext=p->pNext;
p->pNext=add;
p=p->pNext->pNext;
}
ComplexNode*add= new ComplexNode;
add->value=p->value;
add->pSibling=NULL;add->pNext=p->pNext;
p->pNext=add;
p=pHead;
q=p->pNext;
newhead=q;
Con(p);
q=newhead;
while(q->pNext)
{
p->pNext=q->pNext;p=p->pNext;
q->pNext=p->pNext;q=q->pNext;
}
p->pNext=NULL;
}
return newhead;
}
void t2()
{ ComplexNode* p1 = new ComplexNode; ComplexNode* p2 = new ComplexNode;
ComplexNode* p3 = new ComplexNode; ComplexNode* p4 = new ComplexNode;
p1->pNext = p2; p2->pNext = p3; p3->pNext = p4; p4->pNext = NULL;
p1->value = 1 ; p2->value = 2; p3->value = 3 ; p4->value = 4;
p1->pSibling = p3;p2->pSibling = p4; p3->pSibling = NULL; p4->pSibling = NULL;
print(p1);
ComplexNode* newHead = myClone2(p1);
cout<<"old link:"<<endl; print(p1);
cout<<"new link:"<<endl; print(newHead);
cout<<(newHead->pSibling)->value<<endl; //3
deleteList(newHead);
deleteList(p1);
}
int main()
{
t2();
return 0;
}原文:http://wzsts.blog.51cto.com/10251779/1763368