//从尾向前输出链表节点:借助栈,或递归
#include<stdio.h>
#include<stack>
typedef struct LinkNode{
int val;
LinkNode *next;
}*LinkList;
//没有头结点
LinkNode* CreateLinkList(){
int n,i;
LinkNode *l,*p,*q;
l=NULL;
printf("请输入链表节点的总个数\n");
scanf("%d",&n);
if(n==0) return l;
l=(LinkNode*)malloc(sizeof(LinkNode));
l->next=NULL;
q=l;
printf("请输入节点的值\n");
scanf("%d",&q->val);
for(i=0;i<n-1;i++){
p=(LinkNode*)malloc(sizeof(LinkNode));
printf("请输入节点的值\n");
scanf("%d",&p->val);
p->next=q->next;
q->next=p;
q=p;
}
return l;
}
void Print(LinkList l){
LinkNode* p;
p=l;
while(p){
printf("%3d",p->val);
p=p->next;
}
}
void PrintLinkReverse_1(LinkNode* l){
std::stack<LinkNode*> nodes;
LinkNode* p=l;
while(p){
nodes.push(p);
p=p->next;
}
while(!nodes.empty()){
p=nodes.top();
printf("%3d",p->val);
nodes.pop();
}
printf("\n");
}
void PrintLinkReverse_2(LinkNode* l){
if(l){
if(l->next) PrintLinkReverse_2(l->next);
printf("%3d",l->val);
}
}
void main(){
LinkNode* l;
l=CreateLinkList();
Print(l);
PrintLinkReverse_1(l);
PrintLinkReverse_2(l);
}
PrintLinkReverse
最新推荐文章于 2023-04-08 16:38:56 发布