删除有序递增单链表上相同的元素 算法如下 但老是不成功 错在哪?
#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);
}
 
					
				
			
 
											





 
	    