问题:
设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/*
尾插法建立单链表
*/
void R_Print(LinkList L){
if(L->next!=NULL){
R_Print(L->next);
}
printf("%d\n",L->data);
}
LinkList createLinkListStern(LinkList &L){
ElemType x,n;
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL){
printf("内存分配失败");
}
L->next=NULL;
printf("输入单链表的长度:");
scanf("%d",&n);
LNode *s,*r=L;//r指向尾指针
for(int i=0;i<n;i++){
printf("输入第%d个元素:",(i+1));
scanf("%d",&x);
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r= s;
}
r->next=NULL;
return L;
}
/*
遍历展示单链表的值
*/
void display(LinkList &L){
LinkList p;
printf("输出单链表元素:\n");
for(p=L->next;p!=NULL;p=p->next){
int i=1;
printf("第%d个元素为%d\n",i++,p->data);
}
}
int main(){
LNode *L;
createLinkListStern(L);
display(L);
printf("反向输出:\n");
R_Print(L);
}