本人新手菜鸟一个,刚学数据结构,,写了一道单链表的删除操作问题的题,语法没有错,
就是起不了删除低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;
}
为什么无法删除结点?
- 写回答
- 好问题 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键盘的输入法