struct ListNode{
int val;
ListNode *next;
ListNode *sibling;
ListNode(int a):val(a),next(NULL),sibling(NULL){}
};
void CloneNode(ListNode * head)
{
ListNode *pNode = head;
while(pNode != NULL){
LiseNode *p = new ListNode(pNode->val);
p->next = pNode->next;
pNode->next = p;
pNode = p->next;
}
}
void CloneRelation(ListNode * head)
{
if(head == NULL) return;
ListNode *pNode, *cNode;
pNode = head;
while(pNode != NULL){
cNode = pNode->next;
if(pNode->next != NULL)
cNode->sibling = pNode->sibling->next;
pNode = cNode->next;
}
}
ListNode * Reconection(ListNode * head){
ListNode *chead, *cNode, *pNode,*p;
if(head == NULL) return;
chead = head->next;
p = chead->next;
pNode = head;
cNode = chead;
while(p != NULL){
pNode->next = p;
cNode->next = p->next;
pNode = pNode->next;
cNode = cNode->next;
p = cNode->next;
}
pNode->next = NULL;
cNode->next = NULL;
return chead;
}
ListNode * Copy(ListNode * head){
if(head== NULL) return head;
CloneNode(head);
CloneRelation(head);
return reConnection(head);
}