JZ-C-26

剑指offer第二十六题:复杂链表的复制

  1 //============================================================================
  2 // Name        : JZ-C-26.cpp
  3 // Author      : Laughing_Lz
  4 // Version     :
  5 // Copyright   : All Right Reserved
  6 // Description : 复杂链表的复制
  7 //============================================================================
  8
  9 #include <iostream>
 10 #include "ComplexList.h"
 11 #include <stdio.h>
 12 using namespace std;
 13
 14 void CloneNodes(ComplexListNode* pHead);
 15 void ConnectSiblingNodes(ComplexListNode* pHead);
 16 ComplexListNode* ReconnectNodes(ComplexListNode* pHead);
 17
 18 ComplexListNode* Clone(ComplexListNode* pHead) {
 19     CloneNodes(pHead);
 20     ConnectSiblingNodes(pHead);
 21     return ReconnectNodes(pHead);
 22 }
 23 /**
 24  *第一步:克隆Next结点
 25  */
 26 void CloneNodes(ComplexListNode* pHead) {
 27     ComplexListNode* pNode = pHead;
 28     while (pNode != NULL) {
 29         ComplexListNode* pCloneNode = new ComplexListNode();
 30         pCloneNode->m_nValue = pNode->m_nValue;
 31         pCloneNode->m_pNext = pNode->m_pNext;
 32         pNode->m_pNext = pCloneNode;
 33         pNode = pCloneNode->m_pNext; //进行下一次Clone
 34     }
 35 }
 36 /**
 37  *第二步:连接Sibling结点
 38  */
 39 void ConnectSiblingNodes(ComplexListNode* pHead) {
 40     ComplexListNode* pNode = pHead;
 41     while (pNode != NULL) {
 42         ComplexListNode* pCloneNode = pNode->m_pNext;
 43         if (pNode->m_pSibling != NULL) {
 44             pCloneNode->m_pSibling = pNode->m_pSibling->m_pNext;
 45         }
 46         pNode = pCloneNode->m_pNext;
 47     }
 48 }
 49 /**
 50  *第三步:拆分出复制的复杂链表
 51  */
 52 ComplexListNode* ReconnectNodes(ComplexListNode* pHead) {
 53     ComplexListNode* pNode = pHead;
 54     ComplexListNode* pCloneHead = NULL;
 55     ComplexListNode* pCloneNode = NULL;
 56     if (pNode != NULL) {
 57         pCloneHead = pCloneNode = pNode->m_pNext; //先确定复制链表的头
 58         pNode = pCloneNode->m_pNext;
 59     }
 60     while (pNode != NULL) {
 61         pCloneNode->m_pNext = pNode->m_pNext;
 62         pCloneNode = pCloneNode->m_pNext;
 63         pNode = pCloneNode->m_pNext;
 64     }
 65     return pCloneHead;
 66 }
 67
 68 // ====================测试代码====================
 69 void Test(char* testName, ComplexListNode* pHead) {
 70     if (testName != NULL)
 71         printf("%s begins:\n", testName);
 72
 73     printf("The original list is:\n");
 74     PrintList(pHead);
 75
 76     ComplexListNode* pClonedHead = Clone(pHead);
 77
 78     printf("The cloned list is:\n");
 79     PrintList(pClonedHead);
 80 }
 81
 82 //          -----------------
 83 //         \|/              |
 84 //  1-------2-------3-------4-------5
 85 //  |       |      /|\             /| 86 //  --------+--------               |
 87 //          -------------------------
 88 void Test1() {
 89     ComplexListNode* pNode1 = CreateNode(1);
 90     ComplexListNode* pNode2 = CreateNode(2);
 91     ComplexListNode* pNode3 = CreateNode(3);
 92     ComplexListNode* pNode4 = CreateNode(4);
 93     ComplexListNode* pNode5 = CreateNode(5);
 94
 95     BuildNodes(pNode1, pNode2, pNode3);
 96     BuildNodes(pNode2, pNode3, pNode5);
 97     BuildNodes(pNode3, pNode4, NULL);
 98     BuildNodes(pNode4, pNode5, pNode2);
 99
100     Test("Test1", pNode1);
101 }
102
103 // m_pSibling指向结点自身
104 //          -----------------
105 //         \|/              |
106 //  1-------2-------3-------4-------5
107 //         |       | /|\           /|108 //         |       | --             |
109 //         |------------------------|
110 void Test2() {
111     ComplexListNode* pNode1 = CreateNode(1);
112     ComplexListNode* pNode2 = CreateNode(2);
113     ComplexListNode* pNode3 = CreateNode(3);
114     ComplexListNode* pNode4 = CreateNode(4);
115     ComplexListNode* pNode5 = CreateNode(5);
116
117     BuildNodes(pNode1, pNode2, NULL);
118     BuildNodes(pNode2, pNode3, pNode5);
119     BuildNodes(pNode3, pNode4, pNode3);
120     BuildNodes(pNode4, pNode5, pNode2);
121
122     Test("Test2", pNode1);
123 }
124
125 // m_pSibling形成环
126 //          -----------------
127 //         \|/              |
128 //  1-------2-------3-------4-------5
129 //          |              /|130 //          |               |
131 //          |---------------|
132 void Test3() {
133     ComplexListNode* pNode1 = CreateNode(1);
134     ComplexListNode* pNode2 = CreateNode(2);
135     ComplexListNode* pNode3 = CreateNode(3);
136     ComplexListNode* pNode4 = CreateNode(4);
137     ComplexListNode* pNode5 = CreateNode(5);
138
139     BuildNodes(pNode1, pNode2, NULL);
140     BuildNodes(pNode2, pNode3, pNode4);
141     BuildNodes(pNode3, pNode4, NULL);
142     BuildNodes(pNode4, pNode5, pNode2);
143
144     Test("Test3", pNode1);
145 }
146
147 // 只有一个结点
148 void Test4() {
149     ComplexListNode* pNode1 = CreateNode(1);
150     BuildNodes(pNode1, NULL, pNode1);
151
152     Test("Test4", pNode1);
153 }
154
155 // 鲁棒性测试
156 void Test5() {
157     Test("Test5", NULL);
158 }
159
160 int main(int argc, char** argv) {
161     Test1();
162     Test2();
163     Test3();
164     Test4();
165     Test5();
166
167     return 0;
168 }
时间: 2024-11-06 17:04:51

JZ-C-26的相关文章

12.24逆向工程上机作业整理

.386 .model flat, stdcall include kernel32.inc includelib kernel32.lib include msvcrt.inc includelib msvcrt.lib .data szText db "Reverse Engineering", 0 format db "length = %d", 0AH, 0 .code main PROC LEA EDI, szText MOV ECX,0FFFFFFFFH

江面省总叫非手国消到基

而且这里的豺狼人呈现着蓝色的皮毛与外面灰色皮毛的豺狼人完全不一样 但我没答应只是摇头说不用了我没心情 而卡林则是扯起了嘴角面带微笑继续看向前方 嗯T小说整理发布于sDxsw罗宁的声音有些干涩怅惘道谁曾想百年之后今日等待我的却只是一片废墟心爱之人早已化为一扜黄土 咀市搜言臼囟涣却哺缴宦瞻http://p.baidu.com/ihome/center?uid=90b761626331363337653478c4&hn=17_12/26 创氯林蔷舱尾湍侨悸孔逃强http://p.baidu.com/i

论得路资米形律月准百社

稻花香第一次在这里吃饭显得有些拘束我眼神一扫凌雪和秦韵便很自觉一起给稻花香夹菜热情得无以复加直把稻花香感动得一塌糊涂 而且这三头兽的移动速度并不是很快于是说道你们两个在这里等我我过去引一片怪物过来群杀秦韵和凌月都需要注意自己的走位千万别被怪物围了大家看得目瞪口呆居然又是一个天器RP简直很有一飞冲天的势头今天该去买彩票啊说不定能中个亿呢第八波一群丛林怪物树精潮水般的黑暗树精冲向了白云城吓得夏天大叫树妖来啦树妖来啦 嗯随你们我都可以 不过好在这精英级怪物的经验很诱人于是两人也杀得很开心 滥狡哺闭衙耐

MySQL 5.6.26几种安装包的区别

http://downloads.mysql.com/archives/community/ 一.MySQL Installer 5.6.26 mysql-installer-community-5.6.26.0.msi, 364.2MBMySQL Installer 提供了简单易用.向导式的 MySQL 软件的安装体验过程(目前只支持 Windows),包含的产品有:MySQL Server,所有的 connectors,Workbench 和示例模型,示例数据库,文档.该安装包大而全. 二.

10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍

- 10.23 linux任务计划cron - 10.24 chkconfig工具 - 10.25 systemd管理服务 - 10.26 unit介绍 - 10.27 target介绍 - 扩展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226  2. xinetd服(默认机器没有安装这个服务,需要yum install xinetd安装) http://blog.sina.com.cn/s/blog_46

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第1/5套:SQL语言之基础入门及环境准备.主要学习Oracle数据库SQL语言基础介绍.PL/SQL语言介绍.数据库SQL对象与数据类型介绍.SQL语言实战环境准备等. Oracle SQL语言之基础及环境准备,课程内容详细如下: Oracle数据库SQL语言基础介绍Oracle数据

《善圈第26期天天圈》:善圈520,鞠躬迎老兵!

亮点:<善圈第26期天天圈>5.20今日精彩回顾:善圈520,鞠躬迎老兵! 深圳罗湖京基100大厦71层善圈,今天迎来了一位尊贵的客人,他是共和国功臣,一位抗美援朝的英雄老兵--现年83岁的老爷爷陈碧.只见他身穿昔日的绿色军装,挂满了各种军功章. 老人家精神矍铄地向大家行军礼,参加学习的企业家纷纷与老人家合影留念,聆听英雄老兵讲述峥嵘岁月的战斗故事. 著名作家魏巍<谁是最可爱的人>将人们的记忆,回放到60多年前那场让全世界为之瞩目的抗美援朝战争.曾经多少优秀中华儿女,雄赳赳气昂昂跨

3月26日 作业

一.质量管理1.质量管理基本原则?1.以实用为核心的多元要求 2.系统工程 3.职工参与管理 4.管理层和第一把手重视 5.保护消费者权益 6.面向国际市场 2.质量管理的目标?1.顾客满意度 2.预防胜于检查 3.各阶段内的过程 c3.质量管理的主要活动有哪些?(记)质量策划.质量保证.质量控制三个过程 4.质量管理流程包括哪四个环节?(记)(按P'DCA理解记忆)1.确立质量标准体系 2.对项目实施进行质量监控 3.将实际与标准对照 4.纠偏纠错 5.ISO9000质量管理的8项原则是什么?

家庭作业6.23 6.24 6.26 10.6

6.23 设半径为r的磁盘总的磁道是K 如上图去除的部分x*r的磁道数为x*K 那么剩下的磁道数为 (1-x)*K 所以总容量为 2*pi*x*r*(1-x)*K (其中pi,r和K都是常数) 也就是对x*(1-x)进行判断 可以得出x = 0.5的时候取最大 6.24 6.26 可以由以下公式计算得出 10.6 Unix进程打开的描述符赋给了stdin(描述符0).stdout(描述符1)和stderr(描述符2). open函数总是返回最低的未打开的描述符,所以第一次调用open函数会返回描

leetCode做题笔记二(26, 20,9)

LeetCode26:给定一个有序序列,求不同的元素个数并且返回不同序列,要求原地返回,O(1)空间(26, easy) 15分钟,第一次就AC了略开心,最好记录406ms貌似是前1%!虽然这个时间不靠谱 没啥可优化的了,感觉几乎没有废代码 经验?:真的会有公司考这么简单? 括号匹配.(20, easy) 最好记录430ms,前10%.稍微用了点小聪明,不过不好(使用异常做判断) 经验8:使用Stack比使用数组效率高很多,对这个题而言 经验?:真的会有公司考这么简单? 判断一个数是不是回文数,