最近在学习单链表的操作,增删查改这些,自己改善了一下代码,感觉其他的都没问题,就是删除函数这里有问题。我单独剔出来了
#include<stdio.h>
#include<stdlib.h>
typedef struct link{
int value;
struct link *next;
}Link;
Link* init_list(void);//初始化
void display(Link *p);//链表输出
Link* del(Link *p,int location);//删除元素
int main()
{
int cut;
Link *q=init_list();
printf("初始化链表为\n");
display(q);
printf("请输入要删除的数的位置:\n");
scanf("%d",&cut);
del(q,cut);
display(q);
return 0;
}
Link* init_list(void)
{
re_input:
;
int x=0;
int mask=0,count=0;
Link* head=NULL;
Link *p=(Link*)malloc(sizeof(Link*));
head=p;
printf("请输入数据(输入-1结束)\n");
do
{
mask=scanf("%d",&x);
if(x!=-1&&mask!=0)
{
Link *a=(Link*)malloc(sizeof(Link*));
a->value=x;
a->next=NULL;
head->next=a;
head=head->next;
count++;
}
else if(x==-1&&count!=0){
break;
}
else
{
printf("输入中含有非法字符,请重新输入!\n");
fflush(stdin);
goto re_input;
}
}while(x!=-1);
return p;
}
/****************************************/
Link* del(Link *p,int location)
{
int i;
Link *temp=p;
Link *del=NULL;
for(i=1;i<location;i++) {
if(temp->next==NULL)
{
printf("删除位置无效!\n");
return p;
}
temp=temp->next;
}
del=temp->next;
temp->next=temp->next->next;
free(del);
return p;
}
/****************************************/
void display(Link *p)
{
Link* temp=p;
while(temp->next!=NULL)
{
temp=temp->next;
printf("%d ",temp->value);
}
printf("\n");
}
能帮忙看看该怎么改正吗