时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:1082
解决:350
-
题目描述:
-
输入一个链表,从尾到头打印链表每个节点的值。
-
输入:
-
每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。
-
输出:
-
对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。
-
样例输入:
-
1 2 3 4 5 -1
-
样例输出:
-
5 4 3 2 1
- /*********************************
- * 日期:2013-10-18
- * 作者:SJF0115
- * 题号: 九度OJ 题目1511:从尾到头打印链表
- * 来源:http://ac.jobdu.com/problem.php?pid=1511
- * 结果:AC
- * 来源:剑指Offer
- * 总结:
- **********************************/
- #include<iostream>
- #include<malloc.h>
- #include<stdio.h>
- #include<stack>
- using namespace std;
- typedef struct ListNode{
- int value;
- struct ListNode *next;
- }ListNode;
- //从尾到头输出链表
- int ListReverse(ListNode *head){
- stack<int> stack;
- ListNode *p;
- p = head->next;
- //遍历链表,把每个节点数值添加到栈中
- while(p != NULL){
- stack.push(p->value);
- p = p->next;
- }
- //输出栈
- while(!stack.empty()){
- printf("%d\n",stack.top());
- stack.pop();
- }
- return 0;
- }
- int main()
- {
- int i,n;
- //初始化
- ListNode *head = (ListNode *)malloc(sizeof(ListNode));
- ListNode *p;
- head->next = NULL;
- p = head;
- while(scanf("%d",&n)!= EOF){
- //n = -1一个测试用例的结束
- if(n != -1){
- //创建链表
- ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
- newNode->value = n;
- newNode->next = p->next;
- p->next = newNode;
- p = newNode;
- }
- //输出
- else{
- /*p = head->next;
- while(p != NULL){
- printf("%d\n",p->value);
- p = p->next;
- }*/
- //从尾到头输出
- ListReverse(head);
- //初始化
- head->next = NULL;
- p = head;
- }
- }
- return 0;
- }
【解析】