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

本文介绍两种逆序打印单链表的方法:一种利用递归特性实现,另一种借助栈先进后出的特点完成。通过这两种方式,可以有效地改变链表元素的输出顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表节点的定义:

[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. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值