链表中为什么删除最后一个数时出现错误了?

问题描述:输入n个整数,以-1结束输入,再输入一个要删除的整,每次将输入的整数插入到链表头部。

include<stdio.h>

include<stdlib.h>

list deleted(node *head,int n)
{
node p,r;
r=(node *)malloc(sizeof(node));
p=head;
while(p->data!=n)
{

r=p;      
p=p->next;     

}

r->next=p->next;        
free(p);     
return head; 

} //删除指定的节点
list create()
{

int i=0;      
node *p,*q;node *head;  
p=q= (node*) malloc (sizeof(node));      
head=NULL;      
scanf(" %d",&p->data);  

while(p->data!=-1)
{

p->next=head;      
 head=p;        
p=(node*)malloc(sizeof(node));        
scanf("%d",&p->data);    
}        
   return head; 

} //创建一个链表,将每次输入的数插入链表头部。
报错信息:当我删除链表中最后一个数时,出现了错误
例如:输入 1 2 3 —1

     3
 结果:出现很多了数字,而不是 2 1。

如果删除的不是最后一个数,则结果是正确的。
请问各位哪个地方有问题?

阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进