面试题:复杂链表的复制
2017-07-19 13:13
218 查看
题目:复制一个复杂链表。复杂链表就是在链表中的每个结点除了有一个
_next指针指向下一个结点外,还有一个_sbiling指针指向NULL或链表中的任意一个结点。
复杂链表的复制分为以下三步。
1、根据原始链表的每个结点N创建对应的结点N’,并把N’链接在N后面。
2、设置复制出来结点的_sibling。假设原链表结点N的_sibling指向结点S,那么复制出来的结点N’就是N的_next,故N’的_sibling就指向S的_next S’。
3、把长链表分成两个链表。把奇数位的结点连接起来就是原链表,把偶数位的结点连接起来就是复制的链表。
整体代码:
_next指针指向下一个结点外,还有一个_sbiling指针指向NULL或链表中的任意一个结点。
复杂链表的复制分为以下三步。
1、根据原始链表的每个结点N创建对应的结点N’,并把N’链接在N后面。
void CloneNode(Node* head) { Node* node = head; while (node!=NULL) { //复制结点 Node* CNode = new Node(0); CNode->_data = node->_data; CNode->_next = node->_next; CNode->_sibling = NULL; node->_next = CNode; node=CNode->_next; } }
2、设置复制出来结点的_sibling。假设原链表结点N的_sibling指向结点S,那么复制出来的结点N’就是N的_next,故N’的_sibling就指向S的_next S’。
void Connect(Node* head) { Node* node = head; while (node != NULL) { Node* CNode = node->_next; if (node->_sibling != NULL) CNode->_sibling = node->_sibling->_next; node = CNode->_next; } }
3、把长链表分成两个链表。把奇数位的结点连接起来就是原链表,把偶数位的结点连接起来就是复制的链表。
Node* recopy(Node* head) { Node* node = head; Node* CNode = NULL; Node* CNhead = NULL; if (node != NULL) { CNhead =CNode= node->_next; node->_next = CNode->_next; node = node->_next; } while (node != NULL) { CNode->_next = node->_next; CNode = CNode->_next; node->_next = CNode->_next; node = node->_next; } return CNhead; }
整体代码:
struct Node { int _data; Node* _next; Node* _sibling; Node(int data) :_data(data) {} }; Node* clone(Node* head) { CloneNode(head); Connect(head); Node* CNhead = recopy(head); return CNhead; } void test1() { Node* head; Node* n1 = new Node(1); Node* n2 = new Node(2); Node* n3 = new Node(4); Node* n4 = new Node(5); Node* n5 = new Node(6); Node* n6 = new Node(7); head = n1; n1->_next = n2; n2->_next = n3; n3->_next = n4; n4->_next = n5; n5->_next = n6; n6->_next = NULL; n1->_sibling = NULL; n2->_sibling = n4; n3->_sibling = n6; n4->_sibling = NULL; n5->_sibling = n3; n6->_sibling = NULL; Node* m = clone(head); } int main() { test1(); system("pause"); return 0; }
相关文章推荐
- 剑指offer——面试题26:复杂链表的复制
- 剑指Offer系列-面试题26:复杂链表的复制
- 剑指offer 面试题26复杂链表的复制
- 剑指offer面试题26-复杂链表的复制
- 面试题26 复杂链表的复制
- 剑指offer——面试题26:复杂链表的复制
- 链表面试题之复杂链表的复制
- 转载:程序员面试题精选100题(49)-复杂链表的复制
- 面试题26:复杂链表的复制
- 剑指offer——面试题26:复杂链表的复制
- 剑指offer-面试题26-复杂链表的复制
- 剑指offer-面试题26-复杂链表的复制
- 面试题26:复杂链表的复制
- 面试题26. 复杂链表的复制
- 剑指offer面试题[26]-复杂链表的复制
- 面试题26.复杂链表的复制
- 面试题30:复杂链表的复制
- 面试题26:复杂链表的复制
- 剑指Offer:面试题26 复杂链表的复制
- 《剑指Offer》面试题26:复杂链表的复制