{
struct student *p,*q
p=head
while(n!=p->num&&p->next!=NULL)
{q=p
p=p->next}
if(n==p->num)//把这改成if(n==q->num) p在上面找到num为n的节点后已经向后移动了,不能再判断了
{
if(p=head)//这块也有问题 虽然我不知道你想干嘛 但是你肯定想用==判断的 而不是赋值,同样这块应该用的也是q 而不是p
head=p->next
else
q->next=p->next
free(p)
}
return(head)
}
其他的还没看出来 因为你这代码就这么多 也没法调试
for(p1=headp1<head+np1++)printf("%d ",p1->num)
这步有点问题。
其中p1++隐含的假设是链表所有元素是像数组一样在内存中连续存放的。
但是按照前面的代码,所有元素的内存是通过malloc动态分配的,因此p1++并不能移动到下一个元素处。
并且,既然是链表的实现,应该充分利用链表的next指针。
可以重写如下:
p1=head
for(i=0i<n++i)
{
printf("%d ",p1->num)
p1=p1->next
}