设head指向一个非空单向链表,逆向输出所有结点数据域的值

本文介绍了一种使用单链表进行逆序输出的方法,并提供了两种实现方式:一种是通过移动岗哨节点来逆序输出链表元素;另一种是利用栈的特性来达到逆序输出的目的。每种方法都附带了详细的C语言代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//设置岗哨的方法

#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
typedef struct node{
 int data;
 struct node *next;
}ElemSN;
ElemSN *Createlink(int a[])
{
 ElemSN *h=NULL,*np;
 for(int i=SIZE-1;i>=0;i--){
  np=(ElemSN *)malloc(sizeof(ElemSN));
  np->data=a[i];
  np->next=h;
  h=np;
 }
 return h;
 } 
 void Prelink(ElemSN *head)
 {
  ElemSN *p,*endl=NULL;
  while(endl-head){//判断岗哨位置是否等于head
  for(p=head;p->next-endl;p=p->next);//每次让p跑到岗哨前驱
  printf("%4d",p->data);
  endl=p;//每次将岗哨前移
 }
 }
int main()
{
 int i;
 int *a;
 ElemSN *head=NULL;
 a=(int *)malloc(SIZE*sizeof(int));
 //输入数组值
 for(i=0;i<SIZE;i++)
 {
  scanf("%d",a+i);
  } 
  //创建单向链表 
 head=Createlink(a);
 //逆向输出 
 Prelink(head);
  free(a);
 return 0;
 }

//用栈实现

 #include<stdio.h>
 #include<stdlib.h>
 #define SIZE 10
 typedef struct node{
  int data;
  struct node *next;
 }ElemSN;
 ElemSN *Createlink(int a[])
{
 ElemSN *h=NULL,*np;
 for(int i=SIZE-1;i>=0;i--){
  np=(ElemSN *)malloc(sizeof(ElemSN));
  np->data=a[i];
  np->next=h;
  h=np;
 }
 return h;
 } 
 void Prelink(ElemSN *head,int top)
 {
  ElemSN **s;//指针s指向栈空间,栈空间存取结点地址
  ElemSN *p;
  s=(ElemSN **)malloc(SIZE*sizeof(ElemSN *));
  for(p=head;p;p=p->next){
   s[++top]=p;//入栈
  }
  while(top!=-1){
   p=s[top--];//出栈
   printf("%4d",p->data);
  }
 }
 int main()
 {
  int top=-1;
  int *a;
  a=(int *)malloc(SIZE*sizeof(int));
  ElemSN *head=NULL;
  for(int i=0;i<SIZE;i++)
  {
   scanf("%d",a+i);
  }
  //创建链表
  head=Createlink(a);
  //实现要求的功能
  Prelink(head,top);
  free(a);
  return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值