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

来源:互联网 发布:淘宝鼠标宏 编辑:程序博客网 时间:2024/04/27 17:55

链表节点的定义:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. typedef struct LinkNode  
  2. {  
  3.     int _value;  
  4.     struct LinkNode* _next;  
  5. }LinkNode,*pLinkNode;  

链表定义:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. typedef struct LinkList  
  2. {  
  3.     LinkNode* _phead;  
  4. }LinkList,*pLinkList;  
算法一:对于一个单链表的打印通常是从头到尾依次遍历并进行打印,对于遍历的顺序而言是“先遍历后打印”,则:采用递归的方法,便可以实现从尾到头打印单链表。

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //使用递归将单链表从尾到头打印  
  2. void Display_LinkList_EndToStart2(pLinkNode pNode)  
  3. {  
  4.     if(pNode == NULL)  
  5.     {cout<<"This LinkList is Empty!!!"<<endl;}  
  6.     if(pNode != NULL)  
  7.     {  
  8.         if(pNode->_next != NULL)  
  9.            Display_LinkList_EndToStart2(pNode->_next);  
  10.         cout<<pNode->_value<<"->";  
  11.     }  
  12. }  
算法二:上面分析依据遍历的顺序与打印的是“先遍历后打印”,根据这一特性,可以借助栈来进行实现从尾到头打印单链表。

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //借助栈使得单链表从尾到头输出  
  2. void Display_LinkList_EndStartTo1(pLinkList plink)  
  3. {  
  4.     assert(plink);  
  5.     if(plink->_phead == NULL)  
  6.     {cout<<"This LinkList is Empty!!!"<<endl;}  
  7.     stack<int> stack1;  
  8.     pLinkNode cur = plink->_phead ;  
  9.     while(cur != NULL)  
  10.     {  
  11.         stack1.push(cur->_value);  
  12.         cur = cur->_next ;  
  13.     }  
  14.     while(stack1.empty() != true)  
  15.     {  
  16.         cout<<stack1.top()<<"->";  
  17.         stack1.pop();  
  18.     }  
  19.     cout<<"NULL"<<endl;  
  20. }  
0 0
原创粉丝点击