【剑指offer】复制的复杂链条
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26154691
- 题目描写叙述:
-
输入一个复杂链表(每一个节点中有节点值,以及两个指针,一个指向下一个节点,还有一个特殊指针指向随意一个节点)。
- 输入:
-
输入可能包括多个測试例子,输入以EOF结束。
对于每一个測试案例。输入的第一行为一个整数n (1<=n<=1000):n代表将要输入的链表元素的个数。(节点编号从1開始)。
接下来有n个数,表示链表节点中的值。接下来有n个数Ti,Ti表示第i个节点的还有一个指针指向。
Ti = 0 表示这个指针为NULL。
- 输出:
-
相应每一个測试案例,
输出n行。每行有二个数。第一个代表当前节点值,第二个代表当前节点的特殊指针的值。
- 例子输入:
-
5
1 2 3 4 5
3 5 0 2 0
- 例子输出:
-
1 3
2 5
3 0
4 2
5 0
这道题目。鉴于题目的測试要求,我这里用数组实现,话说用数组实现实在是太简单了。并且时间复杂度为O(n),没有体现出剑指offer上的思路的优点,要看链式存储的实现思路。參考剑指offer!
另外,被測试用了给忽悠了,第一次提交。报了WA,我測试了几组用例,都没错。OJ上竟然一组都没通过。后来试了下将输出的的第二个数据由节点编号变为了节点数值。结果AC了。这确实有点坑了,主要是例子给的太不好了,非常easy产生歧义!
AC代码:
#include<stdio.h>
#include<stdlib.h> typedef struct Node
{
int data;
int index; //节点编号(从1開始计算)
int pNext;
int pSibling; //特殊指针
}Node; /*用数组实现非常简单*/
void CloneList(Node *pHead,Node *pClone,int len)
{
if(pHead == NULL)
return;
int i;
for(i=1;i<len;i++)
{
pClone[i].data = pHead[i].data;
pClone[i].index = pHead[i].index;
pClone[i].pNext = pHead[i].pNext;
pClone[i].pSibling = pHead[i].pSibling;
}
} int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
Node *pHead = NULL;
if(n>0)
{
//开辟n+1各节点空间,空出来第一个。这样节点编号就从1開始
pHead = (Node *)malloc((n+1)*sizeof(Node));
if(pHead == NULL)
exit(EXIT_FAILURE);
int i,data;
for(i=1;i<n+1;i++)
{
scanf("%d",&data);
pHead[i].data = data;
pHead[i].index = i;
if(i == n)
pHead[i].pNext = 0;
else
pHead[i].pNext = i+1;
pHead[i].pSibling = 0;
} int ti;
for(i=1;i<n+1;i++)
{
scanf("%d",&ti);
pHead[i].pSibling = ti;
}
} Node *pClone = (Node *)malloc((n+1)*sizeof(Node));
if(pClone == NULL)
exit(EXIT_FAILURE);
CloneList(pHead,pClone,n+1); int i;
for(i=1;i<n+1;i++)
{
printf("%d ",pClone[i].data);
if(pClone[i].pSibling != 0)
printf("%d\n",pClone[pClone[i].pSibling].data);
else
printf("%d\n",pClone[i].pSibling);
} free(pHead);
pHead = NULL;
free(pClone);
pClone = NULL;
}
return 0;
}
/************************************************************** Problem: 1524 User: mmc_maodun Language: C Result: Accepted Time:40 ms Memory:912 kb****************************************************************/版权声明:本文博客原创文章。博客,未经同意,不得转载。
【剑指offer】复制的复杂链条的更多相关文章
- 剑指offer 复制构造函数
复制构造函数: A(const A &other){value=other.value;} 也就是传值参数改为常量引用. #include<iostream> using name ...
- 【Java】 剑指offer(35) 复杂链表的复制
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现函数ComplexListNode* Clone(Compl ...
- 剑指Offer - 九度1524 - 复杂链表的复制
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
- 剑指Offer(二十五):复杂链表的复制
剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- Go语言实现:【剑指offer】复杂链表的复制
该题目来源于牛客网<剑指offer>专题. 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.( ...
- 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 Offer_35 题目详情 方法一 可以使用一个HashMap来存储旧结点和新结点的映射. 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next ...
- 【剑指Offer】复杂链表的复制 解题报告(Python)
[剑指Offer]复杂链表的复制 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 《剑指offer》复杂链表的复制
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 剑指offer 面试题35.复杂链表的复制
时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...
随机推荐
- qtcreator +vs2013 开发xp下使用的程序
在qtcreator 开发,使用vs2013的编辑器开发出来的exe不能在xp下使用, 只需要在pro文件添加 QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5. ...
- Delphi下用API代码创建Form
program PMyWindowClass; uses Windows, Messages, SysUtils; type TMyWindow = class(TObject) priva ...
- 文本框、文本编辑框、按钮——axure线框图部件库介绍
1. 与文本面板组合设计表单 文本框主要是在设计页面表单的时候,用的最多,通过与文本面板的组合使用,下面我们通过文本面板和文本框设计了一个简单的注册表单 对于,文本框中的文字,只需要双击即可编辑文字 ...
- DLP底座(威创定制)
品牌:威创 型号:BC06730-1000 生产商:广东威创视讯科技股份有限公司 1.DLP底座说明 DLP底座由威创统一定制,确保了整套系统的完整性和可靠性.材质为钢结构,根据淄川地下管线中心的现场 ...
- 一种根据URL参数条件动态生成URL的方法
最近做了一个产品列表页类似于搜索列表页, 功能比较简单,比搜索页复杂的逻辑在于,生成各个查询条件的URL.我们的链接如下: http://xxx.xxx.xxx/product/list.html?s ...
- fzu 1909 An Equation(水题)
题目链接:fzu 1909 An Equation 典型的签到题. #include <stdio.h> #include <string.h> bool judge(int ...
- Sprite Kit教程:制作一个通用程序 2
注1:本文译自Sprite Kit Tutorial: Making a Universal App: Part 2 目录 动画的定义:可行性 属性列表 添加游戏逻辑 添加音效 何去何从 上一篇文章中 ...
- UML基本架构建模--类概述
Classes 类 Classes are the most important building block of any object-oriented system. A class is ...
- 【c语言】统计一个数二进制中的1的个数
// 统计一个数二进制中的1的个数 #include <stdio.h> int count(int a) { int count = 0; while (a) { count++; a ...
- CImageList用法介绍
图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式.可以利用WINDOWS32位应用程序接口函数A ...