删除有序递增单链表上相同的元素 算法如下 但老是不成功 错在哪?
#include<stdio.h>
#include<stdlib.h>
#define datatype1 int
#define null 0
#define end -1
#define d "%d"
#define len sizeof(linklist)
typedef struct node
{
datatype1 data;
struct node *next;
}linklist;
/*头插入法建表函数*/
linklist *creatlinkh()
{
linklist *t,*head;
datatype1 x;
t=(linklist *) malloc(len);
t->next=null;head=t;
printf("请有序输入数据:\n");
scanf(d,&x);
while(x!=end)
{ t=(linklist *) malloc(len);
t->data=x;
t->next=null;
t->next=head->next;
head->next=t;
scanf(d,&x);
}
return(head);
}
/*删除元素*/
int del(linklist *head)
{
linklist *p,*t;
p=head->next;
while(p->next!=null)
{
t=p->next;
if(t->data==p->data)
{
p->next=t->next->next;
free(t);
}
else
p=p->next;
}
}
/*链表输出函数*/
void printlink(linklist *head)
{
linklist *p;
p=head;
printf("link is:");
while(p->next!=null)
{
p=p->next;
printf("%d->",p->data);
}
printf("\b\b \n");
}
void main()
{
linklist *hd1=null;
hd1=creatlinkh();
printlink(hd1);
del(hd1);
printlink(hd1);
}