我写的这个代码有点问题,求大神指教啊,编译能通过,但是结果不对。。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode
{
char data;
struct LNode *next;
}LNode,*Linklist;
Linklist creatlist()
{
Linklist head,p;
char ch;
head=(Linklist)malloc(sizeof(LNode));
head->next=NULL;
scanf("%c",&ch);
while(ch!='\n')
{
p=(Linklist)malloc(sizeof(LNode));
p->data=ch;
p->next=head->next;
head->next=p;
scanf("%c",&ch);
}
return head;
}
Linklist findlist(Linklist head,int k)
{
Linklist p=head;
int m=0;
while(p!=NULL&&m<k)
{
p=p->next;
m++;
}
return p;
}
int length(Linklist head)
{
int j=0;
Linklist p;
p=head->next;
while(p!=NULL)
{
p=p->next;
j++;
}
return (j);
}
void insertlist(Linklist head,int i,char x)
{
Linklist p,q;
if(i<0||i>length(head))
printf("Error!!");
else
{
p=findlist(head,i-1);
q=(Linklist)malloc(sizeof(LNode));
q->data=x;
q->next=p->next;
p->next=q;
}
}
void deletelist(Linklist head,int i)
{
Linklist p=head->next,q;
if(i<1||i>length(head))
printf("Error!!");
p=findlist(head,i-1);
q=p->next;
p->next=q->next;
free(q);
}
void printlist(Linklist head)
{
Linklist p=head->next;
printf("\nhead-->");
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("-->end");
}
void main()
{
int l;
Linklist h,p;
h=creatlist();
printlist(h);
l=length(h);
printf("链表的长度为:%d\n",l);
insertlist(h,5,'c');
printlist(h);
l=length(h);
printf("链表的长度为:%d\n",l);
p=findlist(h,5);
printf("找到的元素为:%d\n",p->data);
deletelist(h,4);
printlist(h);
l=length(h);
printf("链表的长度为:%d\n",l);
}