设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
LinkList List_TailInsert(LinkList &L) {
int x;
L=(LinkList)malloc(sizeof(LNode));
L->data=999999;
LNode *s, *r=L;
printf("请输入数值\n");
scanf("%d",&x);
while(x!=9999) {
s=(LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r=s;
scanf("%d",&x);
}
r->next = NULL;
return L;
}
void print(LinkList L) {
if(L->next==NULL)
printf("该链表为空");
LNode *p= L->next;
while(p!=NULL) {
printf("%d ",p->data);
p=p->next;
}
}
void Reverse(LinkList L) {
LinkList p;
LNode *s,*q;
p=(LinkList)malloc(sizeof(LNode));
p->next=NULL;
q=L->next;
while(q!=NULL) {
s=(LNode*)malloc(sizeof(LNode));
s->data=q->data;
s->next = p->next;
p->next = s;
q=q->next;
}
print(p);
}
void R_print(LinkList L){
if(L->next!=NULL) {
R_print(L->next);
}
if(L!=NULL&&L->data!=999999) printf("%d ",L->data);
}
int main() {
LinkList L=NULL;
int x;
List_TailInsert(L);
print(L);
printf("\n");
R_print(L);
return 0;
}
运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/e8feff3596404344983be31fd9ab9484.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ZW_5rGf5biI6IyD5a2m6ZmiMTjnuqfkupHorqHnrpcx54-tQ1blt6XnqIvluIg=,size_15,color_FFFFFF,t_70,g_se,x_16)