【面试题】剑指offer26--复杂链表的复制

来源:互联网 发布:淘宝店卖家要什么软件 编辑:程序博客网 时间:2024/06/07 11:33

链表分很多种,(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;}


原创粉丝点击