Anchunll 2019-08-16 22:32 采纳率: 0%
浏览 142

为什么无法删除结点?

本人新手菜鸟一个,刚学数据结构,,写了一道单链表的删除操作问题的题,语法没有错,
就是起不了删除低i-1个结点的作用,感觉思路也没有错啊。。。有没有哪位大神能够指点指点,感激不尽,,,,
#include
#include
typedef struct linknode{
int data;
struct linknode *next;
}linknode;
void initlist(linknode *&l){
l=(linknode *)malloc(sizeof(linknode));
l->next=NULL;
}
void createlist(linknode *&l){
linknode *r,*s;
l=(linknode *)malloc(sizeof(linknode));
r=l;
int n,j;
scanf("%d",&n);
for(int i=0;i s=(linknode *)malloc(sizeof(linknode));
scanf("%d",&j);
s->data=j;
r->next=s;
r=s;
}
r->next=NULL;
}
bool deletelist(linknode *&l){
linknode *p=l,*q;
int i;
scanf("%d",&i);
if(i return false;
for(int j=0;j p=p->next;
}
q=p->next;
while(q!=NULL&&q->next!=NULL){
p->next=q->next;
free(q);
return true;
}
}
void destroy(linknode *&l){
linknode *pre=l,*p=l->next;
while(p!=NULL){
free(pre);
pre=p;
p=p->next;
}
free(pre);
}
void display(linknode *&l){
linknode *p=l->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
}
int main(){
linknode *l;
initlist(l);
createlist(l);
deletelist(l);
display(l);
destroy(l);
return 0;
}

  • 写回答

1条回答 默认 最新

  • 芣苢的成长之路 2023-06-27 11:53
    关注

    存在一个错误,导致删除操作不能按照预期执行。具体来说,问题出在 deletelist 函数中,代码如下:

    
    while(q!=NULL&&q->next!=NULL){
        p->next=q->next;
        free(q);
        return true;
    }
    

    这段代码的逻辑是在找到要删除的结点的前一个结点 p 后,将 p 的 next 指针指向要删除结点的后一个结点 q->next,然后释放 q 所指向的结点。但是在这段代码的最后,你使用了 return true;,这会导致函数在删除第一个满足条件的结点后就直接返回了,而没有继续删除后面的结点。因此,你需要将 return true; 移到循环外面:

    
    while(q!=NULL&&q->next!=NULL){
        p->next=q->next;
        free(q);
        q=p->next;
    }
    return true;
    
    评论

报告相同问题?

悬赏问题

  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法