单链表的操作
哪位高手能帮忙解决一下这中间的错误啊……#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
Linklist creat(Linklist p)
{
Linklist head,q;
int n=0;
p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->data);
head=NULL;
while(p->data!=0)
{
n++;
if(n==1)
{
head=p;
q = p;
}
else
{
q->next=p;
q=p;
}
p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->data);
}
free(p);
q->next=NULL;
return head;
}
void print(Linklist p)
{
Linklist L;
L=p;
while(L!=NULL)
{
printf("\n%4d",L->data);
L=L->next;
}
}
Linklist reverse(Linklist p)//将链表逆置
{Linklist p1,p2=NULL,p3=NULL;
p1=p;
while(p1!=NULL)
{p3=p2;
p2=p1;
p1=p1->next;
p2->next=p3;
}
p=p2;
}
void del(Linklist p)//删除链表中是偶数的节点
{Linklist q,L;
while(p!=NULL)
{q=p->next->next;
if(p->next->data%2==0)
{L=p->next;
if(q==NULL)
{p->next=NULL;
free(L);}
p->next=q;
free(L);}
else
p=p->next;
}
}
Linklist cha(Linklist p,int x)//在有序链表中插入一个数
{Linklist q;
int i=0;
while(p!=NULL)
{i++;
if(i==1)
{if(p->data=x)
q=(LNode *)malloc(sizeof(LNode));
q->data=x;
q->next=p;
q=p;}
else if(p->next==NULL)
{q=(LNode *)malloc(sizeof(LNode));
q->data=x;
p->next=q;
q->next=NULL;}
else if(p->next->data<x)
{q->data=x;
q->next=p->next;
p->next=q;
}
}
return(p);
}
main()
{
Linklist p;
int x;
p = creat(p);
print(p);
print("\n");
reverse(p);
print(p);
printf("\n");
printf("please input a number:");
scanf("%d",&x);
p=cha(p,x);
print(p);
del(p);
print(p);
}