链表分很多种,(1)单链表:只有指向后一个结点的指针next
(2)双链表:有指向前一个结点的指针prev和指向后一个结点的指针next
(3)复杂链表:除了有一个指向后一个结点的指针next之外,还有一个指向任意结点或者NULL的指针Sibling
如下图所示的情形:
图中直线表示指向后一个结点,而虚线表示指向任意一个结点,或者NULL。
代码实现:
#include<iostream>
using namespace std;
#include<assert.h>
struct Node
{
Node* _value;
Node* _next;
Node* _Sibling;
};
Node* CopyComplexList(Node*& phead)
{
assert(phead);
Node* Cur = phead;
Node* tmp = NULL;
while (Cur)
{
tmp = Cur;
Cur = Cur->_next;
Node* newNode = new Node(tmp->_value);
tmp->_next = newNode;
newNode->_next = Cur;
}
Cur = phead;
Node* newNode = NULL;
while (Cur)
{
newNode = Cur->_next;
if (Cur->_Sibling)
{
newNode->_Sibling = Cur->_Sibling->_next;
}
Cur = newNode->_next;
}
Cur = phead;
Node* newHead = NULL;
if (Cur)
{
newHead = Cur->_next;
}
Node* newCur = newHead;
while (Cur)
{
newCur = Cur->_next;
Cur->_next = newCur;
Cur = Cur->_next;
}
return newHead;
}