复杂链表的复制
来源:互联网 发布:淘宝客服快捷短语设置 编辑:程序博客网 时间:2024/06/12 19:26
题目:请实现函数ComplexListNode* clone(ComplexListNode* pHead),复制
一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext指针指向下一个
节点外,还有以一个m_pSibling指向链表中的任意节点或者NULL。节点定义如下:
在complexList.h中定义
#pragma oncestruct ComplexListNode{int m_nValue;ComplexListNode* m_pNext;ComplexListNode* m_pSibling;};ComplexListNode* CreateNode(int nValue);void BuildNodes(ComplexListNode* pNode, ComplexListNode* pNext, ComplexListNode* pSibling);void PrintList(ComplexListNode* pHead);在complexLish.cpp中实现上面的三个基本操作
#include"complexList.h"#include "stdio.h"ComplexListNode* CreateNode(int nValue){ ComplexListNode* pNode = new ComplexListNode(); pNode->m_nValue = nValue; pNode->m_pNext = NULL; pNode->m_pSibling = NULL; return pNode;}void BuildNodes(ComplexListNode* pNode, ComplexListNode* pNext, ComplexListNode* pSibling){ if(pNode != NULL) { pNode->m_pNext = pNext; pNode->m_pSibling = pSibling; }}void PrintList(ComplexListNode* pHead){ ComplexListNode* pNode = pHead; while(pNode != NULL) { printf("The value of this node is: %d.\n", pNode->m_nValue); if(pNode->m_pSibling != NULL) printf("The value of its sibling is: %d.\n", pNode->m_pSibling->m_nValue); else printf("This node does not have a sibling.\n"); printf("\n"); pNode = pNode->m_pNext; }}在实现ComplexListNode* clone(ComplexListNode* pHead)源文件中实现该方法并作测试
#include<stdio.h>#include"complexList.h"//复制原始链表的任意节点N并创建新节点N',再把N'连接到N的后面。void cloneNodes(ComplexListNode* pHead){if(pHead == NULL)return;ComplexListNode* pNode = pHead;while(pNode != NULL){ComplexListNode* pCloned = new ComplexListNode();pCloned->m_pNext = pNode->m_pNext;pCloned->m_nValue = pNode->m_nValue;pCloned->m_pSibling = NULL;pNode->m_pNext = pCloned;pNode = pNode->m_pNext;}}//如果原始链表上的节点N的m_pSibling指向,则它对应的复制节点//N'的m_pSibling指向S的下一节点S'。void connectSiblingNodes(ComplexListNode* pHead){if(pHead == NULL)return;ComplexListNode* pNode = pHead;while(pNode != NULL){if(pNode->m_pSibling){pNode->m_pNext->m_pSibling = pNode->m_pSibling->m_pNext;}pNode = pNode->m_pNext;}}//将上面两步得到的表拆分成两个链表ComplexListNode* reconnectNodes(ComplexListNode* pHead){ComplexListNode* pNode = pHead;ComplexListNode* pCLonedHead = NULL;ComplexListNode* pClonedNode = NULL;if(pHead){pCLonedHead = pClonedNode = pNode->m_pNext;pNode->m_pNext = pClonedNode->m_pNext;pNode = pNode->m_pNext;}while(pNode != NULL){pClonedNode->m_pNext = pNode->m_pNext;pNode->m_pNext = pClonedNode->m_pNext;pNode = pNode->m_pNext;pClonedNode = pClonedNode->m_pNext;}return pCLonedHead;}ComplexListNode* clone(ComplexListNode* pHead){cloneNodes(pHead);reconnectNodes(pHead);return reconnectNodes(pHead);}void test(){ComplexListNode* pNode1 = CreateNode(1); ComplexListNode* pNode2 = CreateNode(2); ComplexListNode* pNode3 = CreateNode(3); ComplexListNode* pNode4 = CreateNode(4); ComplexListNode* pNode5 = CreateNode(5); BuildNodes(pNode1, pNode2, pNode3); BuildNodes(pNode2, pNode3, pNode5); BuildNodes(pNode3, pNode4, NULL); BuildNodes(pNode4, pNode5, pNode2);printf("The original list is:\n"); PrintList(pNode1);ComplexListNode* pClonedHead = clone(pNode1); printf("The cloned list is:\n"); PrintList(pClonedHead);}int main(){test();}
参考剑指offer
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- c实现哥德巴赫猜想
- 关于srand()和rand()产生随机数的一点问题
- 线性判别分析(Linear Discriminant Analysis, LDA)算法分析
- 二叉树的操作
- Java数据结构学习
- 复杂链表的复制
- [LeetCode] Single Number
- 写的不知道有木有问题
- 题目1449:确定比赛名次
- CGContextRef画图
- jPicker - 一个jQuery的颜色选择器插件
- Linux下chkconfig命令详解
- U盘实现《自己动手写操作系统》
- 独立成分分析(Independent Component Analysis)