逆序输出链表结点的值
例如:head->3->2->5->8->4->7->6->9->0->1
输出为 : 1 0 9 6 7 4 8 5 2 3
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define N 10
typedef struct node{
int data;
struct node *next;
}ElemSN;
//创建单向链表
ElemSN* CreatLink(int a[],int n){
ElemSN *head,*p,*tail; //head为头指针,tail为尾指针,p为新建结点指针
head=NULL;
for(int i=0;i<n;i++){
p=(ElemSN*)malloc(sizeof(ElemSN));
p->data=a[i];
p->next=NULL;
if(!head){ //如果创建的结点是头结点
head=tail=p;
}else{
tail=tail->next=p;
}
}
return head;
}
//递归逆序打印链表
void RecurPreprintLink(ElemSN * head){
if(head){
RecurPreprintLink(head->next);
printf("%5d",head->data);
}
}
//非递归打印链表
void PreprintLink(ElemSN * head){
ElemSN *p,*q;
q=NULL;
while(q!=head){
for(p=head;p->next!=q;p=p->next);
printf("%5d",p->data);
q=p;
}
}
int main(void){
ElemSN *head;
int a[N]={3,2,5,8,4,7,6,9,0,1};
//创建一个单向链表
head=CreatLink(a,N);
//递归逆序输出链表
RecurPreprintLink(head);
printf("\n");
//非递归逆序输出链表
PreprintLink(head);
}
运行结果如下: