双链表程序插入和删除
帮忙看一下双链表程序是否正确????????
#define NULL 0
typedef struct dnode
{int data;
struct dnode *prior,*next;
}dlinklist;
dlinklist *createdlinklist()
{ int data;
dlinklist *head,*s,*r;
head=(dlinklist *)malloc(sizeof(dlinklist));
r=head;
scanf("%d",&data);
while(data!=-1)
{s=(dlinklist *)malloc(sizeof(dlinklist));
s->data=data;
r->next=s;
s->prior=r;
r=s;
scanf("%d",&data);
}
r->next=head;
return head;
}
printdlinklist(dlinklist *head)
{dlinklist *p;
p=head->next;
if(head==NULL)
printf("dlinklist not exist:\n");
else
{printf("head");
while(p!=head)
{printf("->%3d",p->data);
p=p->next;
}
printf("->end\n");
}
}
INSERTBEFORE(dlinklist *head,int x,int y)
{dlinklist *s,*p;
s=(dlinklist *)malloc(sizeof(dlinklist));
s->data=y;
p=head->next;
while((p!=head)&&(p->data!=x))
p=p->next;
s->prior=p->prior;
s->next=p;
p->prior->next=s;
p->prior=s;
}
DELETE(dlinklist *head,int m)
{dlinklist *p;
p=head->next;
while((p!=head)&&(p->data!=m))
p=p->next;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
}
main()
{dlinklist *head;
int x,y,m;
printf("please input some numbers to create a dlinjklist:\n");
head=createdlinklist();
printf("The data are :\n");
printdlinklist(head);
printf("please input x and y,y will be insertwd before x:\n");
scanf("%d%d",&x,&y);
INSERTBEFORE(head,x,y);
printdlinklist(head);
printf("please input the number to ne deleted:\n");
scanf("%d",&m);
DELETE(head,m);
printdlinklist(head);
printf("\n");
}