【剑指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 ...
随机推荐
- QT中.pro文件的写法
QT中.pro文件的写法 qmake 变量 含义 #xxxx 注释, 从“#”开始,到这一行结束 SOURCES 指定源文件 SOURCES = *.cpp 对于多源文件,可用空格分开 SOURC ...
- Windows Azure使用VS 2010的云应用开发过程
原文 Windows Azure使用VS 2010的云应用开发过程 作为技术人员,如果在2010还不知道云计算,那么你已经“OUT”了:作为Visual Studio平台的使用者,如果你不知道VS 2 ...
- baas & API 网关
最近一段时间一直在做API 网关的工作.清晰看到当前云下Baas将会是主要方向,而API网关会是一把利剑. 本人正在规划API网关,有兴趣的可以一起探讨:hotwheels_bo@163.com
- 14.18 InnoDB Backup and Recovery 备份和恢复:
14.18 InnoDB Backup and Recovery 备份和恢复: 安全数据库管理的关键是 做定期的备份,依赖你的数据卷, MySQL server的数量和数据库的负载,你可以使用那些技术 ...
- java.io.EOFException解决
主要错误提演示样例如以下: 严重: IOException while loading persisted sessions: java.io.EOFException 严重: Exception l ...
- [置顶] dubbo管理控制台安装
dubbo管理控制台开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能. 1.下载dubbo 地址:http://code.alibabatech.com/mvn ...
- Struts2 Action接收表单参数
struts2 Action获取表单传值 1.通过属性驱动式 JSP: <form action="sys/login.action" method ...
- 怎么用CIFilter给图片加上各种各样的滤镜_1
近期在做对图像处理的app,而要对图像进行处理,CoreImage是离不开的框架. 上网Google了一下,大部分的博客都是仅仅讲了怎么给图像加上怀旧(CISepiaTone).模糊(CIBloom) ...
- UVa 11233 - Deli Deli
题目:求所给单词的负数形式. 分析:模拟. 直接按章题意分情况求解就可以. 说明:按语法也能够(⊙_⊙). #include <iostream> #include <cstdlib ...
- Successful Lisp - Cover
Successful Lisp - Cover Successful Lisp: How to Understand and Use Common Lisp