【九度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 #include 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 日

相关内容推荐