首页 > 代码库 > 从尾到头打印链表
从尾到头打印链表
使用数据结构stack或者递归
1 使用stack
#include <iostream> #include <stack> using namespace std; typedef struct listNode{ int key; struct listNode *pNext; } * pNode,Node; void createNode(pNode &pHead){ bool isFirst=true; int temp; scanf("%d",&temp); pNode p=pHead,q; while(temp!=0){ q=(pNode)malloc(sizeof(Node)); q->key=temp; q->pNext=NULL; if(isFirst){ p=pHead=q; isFirst=false; }else{ p->pNext=q; p=q; } scanf("%d",&temp); } cout<<"原链表是:"<<endl; p=pHead; while(p){ cout<<p->key<<" "; p=p->pNext; } } void printListReverse(const pNode pHead){ stack<pNode> veP; pNode p=pHead; while(p){ veP.push(p); p=p->pNext; } while(!veP.empty()){ p=veP.top(); cout<<p->key; veP.pop(); } } int main(){ pNode pHead=NULL; createNode(pHead); printListReverse(pHead); return 0; }
运行结果:
2 递归
#include <iostream> #include <stack> using namespace std; typedef struct listNode{ int key; struct listNode *pNext; } * pNode,Node; void createNode(pNode &pHead){ bool isFirst=true; int temp; scanf("%d",&temp); pNode p=pHead,q; while(temp!=0){ q=(pNode)malloc(sizeof(Node)); q->key=temp; q->pNext=NULL; if(isFirst){ p=pHead=q; isFirst=false; }else{ p->pNext=q; p=q; } scanf("%d",&temp); } cout<<"原链表是:"<<endl; p=pHead; while(p){ cout<<p->key<<" "; p=p->pNext; } } void printListReverse(const pNode pHead){ if(pHead==NULL) return; printListReverse(pHead->pNext); cout<<pHead->key; } int main(){ pNode pHead=NULL; createNode(pHead); printListReverse(pHead); return 0; }
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。