输入一个链表,从尾到头打印链表每个节点的值。
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
1 2 3 4 5 -1
5 4 3 2 1
代码(一)双链表输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
#include <stdio.h>#include <stdlib.h>typedef
struct
node *link;typedef
struct
node{ int
data; link pre; link next;}Node;void
print(link p){ while(p->pre){ printf("%d\n", p->data); p = p->pre; }}int
main(int
argc, char
const
*argv[]){ int
data; link L = malloc(sizeof(Node)); L->pre = L->next = 0; L->data = -1; link p = L; for(; ;){ scanf("%d", &data); if(data == -1) break; link y = malloc(sizeof(Node)); y->data = data; y->next = p->next; p->next = y; y->pre = p; p = y; } print(p); return
0;} |
代码(二)单链表递归输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
#include <stdio.h>#include <stdlib.h>typedef
struct
node *link;typedef
struct
node{ int
data; link next;}Node;void
print(link p){ if(!p) return; if(p){ print(p->next); } printf("%d\n", p->data);}int
main(int
argc, char
const
*argv[]){ int
data; link L = malloc(sizeof(Node)); L->next = 0; link p = L; for(; ;){ scanf("%d", &data); if(data == -1) break; link y = malloc(sizeof(Node)); y->data = data; y->next = p->next; p->next = y; p = y; } print(L->next); return
0;} |
原文:http://www.cnblogs.com/firstrate/p/3539124.html