【九度OJ】题目1181:遍历链表 解题报告

时间:2023-03-09 15:37:18
【九度OJ】题目1181:遍历链表 解题报告

【九度OJ】题目1181:遍历链表 解题报告

标签(空格分隔): 九度OJ


http://ac.jobdu.com/problem.php?pid=1181

题目描述:

建立一个升序链表并遍历输出。
  

输入:

输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。

输出:

可能有多组测试数据,对于每组数据,
将n个整数建立升序链表,之后遍历链表并输出。

样例输入:

4
3 5 7 9

样例输出:

3 5 7 9

Ways

这个题目感觉可以作弊啊……我直接排序不就行了吗,为啥一定要用链表。。

Anyway,还是按照链表来做了一遍。出现了下面的问题。

1、链表每次循环没有初始化,导致上次结果影响下次的,出现了OLE。
2、child是指针,给childe赋值的时候要把下一个节点的地址赋值过来。
3、采用的也是指针进行遍历,所以声明temp时要加*
4、如果是节点的值使用的时候用点,如果是指针指向的元素的值的使用就要用->
5、给节点的child赋值时,最后一个元素的child不要赋值

#include<stdio.h>
#include<algorithm> using namespace std; struct Node {
int x;
Node *child;
} node[1001]; bool cmp(Node a, Node b) {
return a.x < b.x;
} int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < 1000; i++) {//初始化
node[i].x = 0;
node[i].child = NULL;
}
for (int i = 0; i < n; i++) {
scanf("%d", &node[i].x);
}
sort(node, node + n, cmp);
for (int i = 0; i < n - 1; i++) {//最后个元素不赋值
node[i].child = &node[i + 1];//引用
}
Node *temp = &node[0];//引用
bool isFirst = true;
while (temp != NULL) {
if (isFirst) {
printf("%d", temp->x);
isFirst = false;
} else {
printf(" %d", temp->x);
}
temp = temp->child;
}
printf("\n");
}
return 0;
}

Date

2017 年 3 月 18 日