c语言单链表的输入输出

#include "stdio.h"
#include "malloc.h"

typedef struct node
{
int data; //数据域
struct Lnode *next; //指针域
}Lnode;

Lnode *createlinklist(Lnode *l) //建立单链表
{
Lnode tail,p; //l为头结点
int i;
l=(Lnode
)malloc(sizeof(Lnode)); //头结点动态分配内存
l->next=NULL; //创建单链表头结点
tail=l; //头尾指针指向同一结点
for(i=1;;i++)
{
p=(Lnode
)malloc(sizeof(Lnode));
scanf("%d",&p->data);
if(p->data==32767) break;
p->next=NULL;
tail->next=p; //将新结点插入链表尾部
tail=p;

}

return 0;
}

void printlinklist(Lnode *l)
{
Lnode *p;
for(p=l->next;p!=NULL;p=p->next)
printf("%d",p->data);
}

void getelem1(Lnode *l,int i) //按序号查找
{
int j;
Lnode *p=l->next;
for(j=1;(p!=NULL)&&(j p=p->next;
if(p==NULL) printf("error!");
else printf("第%d个数据元素为%d",i,p->data);
}

void getelem2(Lnode *l,int e) //按值查找
{
int j;
Lnode *p=l->next;
for(j=1;(p->data!=e)&&(p!=NULL);j++)
p=p->next;
if(p->data==e) printf("元素%d在单链表中位置为%d",e,j);
else printf("error!");
}

void linklistinsert(Lnode *l,int i,int e)
{
int j;
Lnode *p,q;
for(j=0;(p!=NULL)&&(j p=p->next;
if(j!=i-1) printf("error!");
else
{
q=(Lnode
)malloc(sizeof(Lnode));
q->data=e;
q->next=p->next;
p->next=q;
}
printf("在第%d个位置插入数据后的单链表:",i);
printlinklist(l);
}

void linklistdelete1(Lnode *l,int i) //按序号删除
{
int j;
Lnode *p=l,*q=l->next;
for(j=1;(q!=NULL)&&(j {
p=q;
q=q->next;
}
if(j==i)
{
p->next=q->next;
free(q);
}
else printf("error!");
printf("删除第%d个元素的单链表:",i);
printlinklist(l);
}

void linklistdelete2(Lnode *l,int e) //按值删除
{
Lnode *p=l,*q;
for(q=l->next;(q!=NULL)&&(q->data!=e);)
{
p=q;
q=q->next;
}
if(q->data==e)
{
p->next=q->next;
free(q);
}
else printf("error!");
printf("删除%d的单链表:",e);
printlinklist(l);
}

void linklistlength(Lnode *l)
{
Lnode *p=l->next;
int n;
for(n=0;p!=NULL;n++)
p=p->next;
printf("单链表长度为%d",n);
}
int main()
{
Lnode *l; //l是单链表类型
createlinklist(l); //建立以l为头节点的单链表
getelem1(l,3); //查找以l为头节点的单链表中第三个元素
getelem2(l,76);//查找数据元素76
linklistinsert(l,4,56);//在第4个位置上插入元素56,输出单链表
linklistdelete1(l,7);//删除第7个元素,输出列表
linklistdelete2(l,76);//删除值为76的第一个元素,输出列表
linklistlength(l);//求单链表长度
return 0;
}