#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
}