- 题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
- 输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
- 输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
- 样例输入:
-
1 2 3 4 5 -1
- 样例输出:
-
5 4 3 2 1
代码(一)双链表输出:
#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 ", 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; }
代码(二)单链表递归输出:
#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 ", 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; }