-
输入一个链表,从尾到头打印链表每个节点的值。
时间限制:1 秒
内存限制:128 兆
题目描述:
-
输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
-
输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
-
样例输入:
-
1 2 3 4 5 -1
-
样例输出:
-
5 4 3 2 1
-
-
题目分析:关于此题题目描述很简单, 没有给数据量,不好分析,但是最简单的方法是递归,如果数据量比较高,建议开辟空间
-
代码使用最简单的递归方法,时间复杂度为O(n), 数据量大时会栈溢出, 代码已AC。
-
#include <iostream> #include <cstdio> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int _val) : val(_val), next(NULL){} }; void dfs(ListNode *node) { if (node == NULL) return; dfs(node -> next); printf("%d\n", node -> val); } int main(void) { int val; ListNode dummy(-1); ListNode *pre = &dummy; while (scanf("%d", &val) != EOF && val != -1) { pre -> next = new ListNode(val); pre = pre -> next; } dfs(dummy.next); return 0; }