gpt4 book ai didi

c - 特定的链表 C 函数

转载 作者:行者123 更新时间:2023-11-30 17:40:10 25 4
gpt4 key购买 nike

我需要编写一个在链表上工作的 C 函数,如下所示:

struct list {
int value;
struct list * next_ptr;
}

该函数将阈值数字和列表本身作为输入,然后它必须:

1) 为列表中的每个整数加 +1
2)然后检查哪个大于阈值并将其删除
3)给出删除元素的数量作为输出

列表必须从小到大排序(例如:1 2 3 4 YES、4 3 2 1 或 1 3 2 4 NO...)

它应该如何工作的示例:

  • 列表中的值:2 4 6 8
  • 阈值:6
  • 列表变为 3 5 7 9
  • 该函数删除 7 和 9 -> 3 5 未删除
  • 输出为 2,因为 2 个值已被删除...

这是我写的代码,但实际上它不起作用,我认为指针存在一些问题:

功能:

int thres_erase(struct list ** ptrptr, int thres){
int count;
visit_incr(ptrptr);
while (*ptrptr != NULL){
if ((*ptrptr)->value > thres){
consume(ptrptr);
count ++;
ptrptr= &((*ptrptr)->next_ptr);
}
else
ptrptr= &((*ptrptr)->next_ptr);
}
return count;
}

(Count是删除元素的数量)

使用的其他 2 个函数(它们实际上工作得很好):

void consume (struct list ** ptrptr){
struct list *tmp_ptr;
if (*ptrptr != NULL){
tmp_ptr = *ptrptr;
*ptrptr = (*ptrptr)->next_ptr;
free(tmp_ptr);
}
else
printf("\nEmpty!");

void visit_incr( struct list ** ptr ) {
while ( *ptr != NULL ) {
(*ptr)->value = (*ptr)->value + 1;
ptr = &((*ptr)->next_ptr);
}
}

我正在寻找一种不会大幅改变功能的解决方案,只需使其正常工作...

最佳答案

我看到的第一个问题是当您调用“visit_incr”时,它将 ptrptr 更新到列表的末尾,因此您的 while 循环永远不会运行。

visit_incr(ptrptr);
while (*ptrptr != NULL){

一般来说,您应该学习附加调试器并单步调试代码,或者至少使用 printfs,这样您就可以实际看到代码在做什么。否则编码会非常痛苦。

关于c - 特定的链表 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com