从尾到头打印链表

题目描述:

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

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

根据链表的特性,查找其中某一个结点的时间复杂度是O(n)。 

遍历链表的时候,将遍历的结果存放在一个栈中,遍历结束以后输出栈中的元素值即可。

 

 1 /*
 2 #include <stdio.h> 
 3 #include <stdlib.h>  
 4 #include <stack> 
 5 #include <algorithm> 
 6 using namespace std;
 7 */
 8 struct listnode
 9 {
10     int data;
11     node* next;
12 };
13 
14 void add(listnode** phead,int value)
15 {
16     /*链表是一种动态结构,创建时无需知道大小,每插入一个节点都要为新节点开辟空间,调整指针指向没有闲置的内存,链表的空间效率比数组高。*/
17     listnode* p=new listnode();
18     p->data=value;
19     p->next=null;
20     //判断链表是否为空
21     if( null == *phead )
22     {
23         *phead=p;
24     }
25      else
26     {
27         listnode* find=*phead;
28         //遍历找到插入的位置
29         while(find->next!=null)
30         {
31             find=find->next;
32         }
33         find-next=p;
34     }
35 36 int printlist(listnode* phead)
37 {
38      stack<int> s;
39      listnode* p=*phead;
40      while(null!=p)
41      {
42         s.push(p->data);
43         p=p->next;
44      }
45      printf("从尾到头打印链表:\n");
46      while(!s.empty())
47      {
48         printf("%d\n",s.top());
49         s.pop();
50      }
51 }
52  

 

posted on 2013-07-18 20:11  听雪同学  阅读(225)  评论(0编辑  收藏  举报

导航