删除链表头节点

来源:百度知道 编辑:UC知道 时间:2024/05/31 09:07:25
void Del(List L){//这么个函数请大侠指教,删除头节点总是失败(原因见下)
Node *p,*q;
char name[12];
q=p=(Node*)malloc(sizeof(Node));
gets(name);
p=L;
while (strcmp(name,p->name) && p->next!=NULL)//循环查找
{
q=p;
p=p->next;
}
if(!strcmp(name,p->name))
{
if(p==L)
L=p->next;//删头节点,跟踪到这,L确实指向下一节点
else
q->next=p->next;//中间节点
printf("删除记录成功。\n");
free(p);//free之后,在外面L就变了(被free了)
}//这该怎么解决啊

void Del(List L){//这么个函数请大侠指教,删除头节点总是失败(原因见下)
Node *p,*q;
char name[12];
不能向P分配
gets(name);
p=L;
while (strcmp(name,p->name) && p->next!=NULL)//循环查找
{
q=p;
p=p->next;
}
if(!strcmp(name,p->name))
{
if(p==L)
L=p->next;//删头节点,跟踪到这,L确实指向下一节点
else
q->next=p->next;//中间节点
printf("删除记录成功。\n");
不能释放P。。。。L是指向P的
}//

不能删除p