剑指Offer:从尾到头打印链表

题目1511:从尾到头打印链表

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:1082

解决:350

题目描述:

输入一个链表,从尾到头打印链表每个节点的值。

输入:

每个输入文件仅包含一组测试样例。
每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。

输出:

对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。

样例输入:
1
2
3
4
5
-1
样例输出:
5
4
3
2
1
【代码】


  1. /********************************* 
  2. *   日期:2013-10-18 
  3. *   作者:SJF0115 
  4. *   题号: 九度OJ 题目1511:从尾到头打印链表 
  5. *   来源:http://ac.jobdu.com/problem.php?pid=1511 
  6. *   结果:AC 
  7. *   来源:剑指Offer 
  8. *   总结: 
  9. **********************************/  
  10. #include<iostream>  
  11. #include<malloc.h>  
  12. #include<stdio.h>  
  13. #include<stack>  
  14. using namespace std;  
  15.   
  16. typedef struct ListNode{  
  17.     int value;  
  18.     struct ListNode *next;  
  19. }ListNode;  
  20.   
  21. //从尾到头输出链表  
  22. int ListReverse(ListNode *head){  
  23.     stack<int> stack;  
  24.     ListNode *p;  
  25.     p = head->next;  
  26.     //遍历链表,把每个节点数值添加到栈中  
  27.     while(p != NULL){  
  28.         stack.push(p->value);  
  29.         p = p->next;  
  30.     }  
  31.     //输出栈  
  32.     while(!stack.empty()){  
  33.         printf("%d ",stack.top());  
  34.         stack.pop();  
  35.     }  
  36.     return 0;  
  37. }  
  38.   
  39. int main()  
  40. {     
  41.     int i,n;  
  42.     //初始化  
  43.     ListNode *head = (ListNode *)malloc(sizeof(ListNode));  
  44.     ListNode *p;  
  45.     head->next = NULL;    
  46.     p = head;    
  47.     while(scanf("%d",&n)!= EOF){  
  48.         //n = -1一个测试用例的结束  
  49.         if(n != -1){  
  50.             //创建链表  
  51.             ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));  
  52.             newNode->value = n;  
  53.             newNode->next = p->next;  
  54.             p->next = newNode;  
  55.             p = newNode;  
  56.         }  
  57.         //输出  
  58.         else{  
  59.             /*p = head->next; 
  60.             while(p != NULL){ 
  61.                 printf("%d ",p->value); 
  62.                 p = p->next; 
  63.             }*/  
  64.             //从尾到头输出  
  65.             ListReverse(head);  
  66.             //初始化  
  67.             head->next = NULL;  
  68.             p = head;  
  69.         }  
  70.     }  
  71.     return 0;  
  72. }  


【解析】




原文地址:https://www.cnblogs.com/baoendemao/p/3804708.html