很简单的C语言小程序,找不出原因

我想根据学号来删除信息。怎么解决

case 2:
{
int num;
NodePtr s;
printf("请输入要删除的学生学号:");
scanf("%d", &num);
s = Search(head, num);
Delete(head, s);
break;
}
---------------------------------------------------------------------------
void Delete(NodePtr head, int num)
{
NodePtr p,q;
p = head;
if (p->next == NULL) printf("------------");
else{
q = p->next;
p->next = q->next;
free(q);
}
}

 while (p->Next != null)
{
if (p->学号 = num)
{
q = p->next;
p->next = q->next;
free(q);
break;
}
p = p->Next;
}

你的Delete(head,s);中的s是NodePtr类型,而void Delete(NodePtr head,int num)中的num是int类型,编译不会报错?

void Delete(NodePtr head,NodePtr s)
{
NodePtr p,q ;
if(s == NULL)
printf("There is no students whose id is ...");
else if(s->next == NULL) //若s指向尾节点
free(s);
else
{
p = head ;
while(p->next != s )
{
q = p->next ;
p = q->next ;
}
p->next = q->next ;
free(q);
}
}
NodePtr Search(NodePtr head,int num)
{
NodePtr p,q;
p = head ;
while(p->next != NULL)
{
if(p->ID == num)
return p ;
p = p->next ;
}
return NULL ; //没有找到就返回NULL
}
这个可能还是会有点问题,例如找到的节点为首节点时,删除操作会出错,你自己在改一改吧,我还没运行试试,写的有点乱