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

posted @ 2017-03-18 13:17  负雪明烛  阅读(21)  评论(0编辑  收藏  举报