C语言用链表实现逆序输出

Python017

C语言用链表实现逆序输出,第1张

#include<stdio.h>

#include<stdlib.h>

#include <malloc.h>

//定义链表节点

typedef struct LNode

{ int data

  struct LNode *next

} LNode, *Linklist

//创建链表

Linklist create()

{ int i,n //i用于下面循环,n用来存放有效节点的字数

  Linklist p,L

  printf("Please input N =")

  scanf("%d",&n)

  L= (Linklist)malloc(sizeof(LNode)) // 分配一个不存放有效数据的头结点

  L->next=NULL

  for(i = 0 i < n i++)

  { p = (Linklist)malloc(sizeof(LNode))//生成新节点

    scanf("%d",&p->data)//输入元素值

    p->next = L->next

    L->next = p

  }

  return L //返回头节点 

}

//链表反转输出 

Linklist ReverseList(Linklist L,int st)    //st为1时输出结点数据

{ if(L->next!= NULL)

    ReverseList(L->next,1)

  if(st)printf("%d ", L->data)

  return L

}

void put(Linklist L)

{ Linklist p

  p = L->next

  while(p != NULL)

  { printf("%d ", p->data)

    p = p->next

  }

  printf("\n")

}

int main()

{ Linklist L

  L=create()

  printf("A: ") put(L)

  printf("B: ")

  ReverseList(L,0)    //附加结点未保存数据,故第二参数为0

  return 0

}

链表分类型有:单链表、双链表、单向环形链表、双向环形链表。

单链表:只有一个头节点为入口,并且每一个节点只有一个单向地址指向下一个节点,简单的说在后一个节点无法返回上一个节点。

双链表:有头节点和尾节点作为入口,每一个节点有两个地址,一个指向前一个节点,一个指向后一个节点。解决了单链表无法返回前一个节点的问题。

单向环形链表:这是一个特殊的单链表,这个链表是把它的最后一个节点地址指向首节点的入口处。如果它要查找前一个节点的时候需要,转回首节点然后才能到达前一个节点。

双向环形链表:顾名思义,构成环形结构的双向链表。

我帮你稍微改了一下,其他你自己改吧,我也刚学c数据结构,给你个例子你可以选择性参考//我自己写的。。

linklist *Creatlist(linklist*L){

L=(linklist*)malloc(sizeof(linklist))

L->next=NULL

return L

}

int Judge(linklist *L){

if(L->next==NULL)

{

printf("建表成功...\n")

}

else

printf("建表失败.\n")

return 0

}

int Input(linklist *L,int n){

int i=1,x

linklist *p,*q,*r

r=L

q=L

if(L->next==NULL)

{

for(i=1i<=ni++)

{

printf("请输入%d个数据:",i)

scanf("%d",&x)

p=(linklist*)malloc(sizeof(linklist))

p->data=x

p->next=NULL

r->next=p

r=r->next

}

printf("输入的数据为:")

for(i=1i<=ni++)

{

q=q->next

printf("%d ",q->data)

}

printf("\n")

}

else

printf("输入失败.\n")

return 0

}