输入一个链表,从尾到头打印链表每个节点的值。
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于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