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