6.7w+
社区成员
返回值出现了指针越界,并且最后的flag标志位的判断语句也没有执行,我想请教一下大家
void delete_list(Node *phead, int num)//前者传递链表首节点位置,后者传递要删除节点的值
{
p = phead;//遍历起始节点
int flag = 0;//标志位判断是否有该值
Node *q = (Node*) malloc (sizeof(Node));
if(p != NULL)//空表判断
{
if(p->next)//非单节点进入循环
{
while(p)// 1.首节点 2.尾结点 3.中间节点
{
printf("*");//测试循环进入次数
//尾部节点删除 前个节点的next 指向为NULL
if(p->next->next == NULL)//最后一个
{
if(p->next->value == num)
{
flag = 1;
q = p->next;
p->next = NULL;
free(q);
}
}
//首节点用额外指针直接删除
if(p == phead)
{
if(p->value == num)
{
flag = 1;
q=p;
q->next = NULL;
phead= phead->next; //改头
free(q);
}
}
// 中间节点1.将前驱的后继指向 删除节点的后继
//2.删除该节点
else
{
if(p->next->value == num)
{
flag = 1;
q=p->next;
p->next = q->next;
q->next =NULL;//断链
free(q);
}
}
p = p ->next;
}
}
//只有一个节点
else
{
if(p->value == num)
{
q=p;
free(q);
phead = NULL;
}
}
}
if(flag == 1)
printf("find num %d",num);
else
printf("no find",num);
}
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
void delete_list(Node **phead, int num)//前者传递链表首节点位置,后者传递要删除节点的值
{
Node *p = *phead;//遍历起始节点
int flag = 0;//标志位判断是否有该值
Node *q = (Node*) malloc (sizeof(Node));
if(p != NULL)//空表判断
{
if(p->next == NULL)
{
if(p->value == num)
*phead = NULL;
}
else//非单节点进入循环
{
while(p->next)// 1.首节点 2.尾结点 3.中间节点 (23其实同一类)
{
//printf("*");//测试循环进入次数
if(p == *phead && p->value == num)
{
flag = 1;
q=p;
(*phead)= (*phead)->next; //改头
free(q);
break;
//首节点用额外指针直接删除
}
// 中间节点1.将前驱的后继指向 删除节点的后继
//2.删除该节点
else
{
if(p->next->value == num)
{
flag = 1;
q=p->next;
p->next = q->next;
free(q);
break;
}
}
p = p->next;
}//while{}
}
}
if(flag == 1)
printf("find num %d",num);
else
printf("no find",num);
}