gpt4 book ai didi

c - 我需要从 c 中的列表中删除相同的元素

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

有人可以结束这个算法吗?

void trinti_pasikartojancius(struct el * *prad, struct el * *pab, struct el * elem){
struct el *g, *elemk;
int i =1;
g = *prad;
elem= elem->kitas;
if(g->duom == elem->duom){
elem->kitas->pries = elem->pries;
elem->pries->kitas = elem->kitas;
free(elem);
if( g->kitas != NULL){
g = g->kitas;
g->pries = NULL;
free( *prad );
*prad = g;
}
else{
free ( *prad );
*prad = NULL;
*pab = NULL;
}
}
}

(通过 Google 翻译将变量名称翻译成英文。我相信这个问题的意思是“有人完成这个算法吗?”)

void delete_duplicate (struct e ** start, struct ** e end, struct elem * e) {
struct e * g * elemk;
int i = 1;
g = * start;
elem = elem-> next;
if (g-> conn == elem-> data) {
elem-> next-> v = elem-> before;
elem-> v-> next = elem-> next;
free (items);
if (g-> next! = NULL) {
g = g-> next;
g-> before = NULL;
free (* start);
* start = g;
}
else {
free (* start);
* start = NULL;
* end = NULL;
}
}
}

最佳答案

假设(正如 Google 告诉我的)prieskitas 是立陶宛语,表示“上一个”和“下一个”,那么我们就有一个双向链表,并且我猜想我们正在删除一个元素。

问题似乎是您的 if/else 周围没有循环。在编写程序时,如果没有循环,则 g->duom == elem->duom 不可能为 true,除非 prad (start) 是 elem.

但是既然您已经知道要删除的节点 (elem),为什么还要寻找它呢?从这个开始:

elem->kitas->pries = elem->pries;
elem->pries->kitas = elem->kitas;
free(elem);

这会将 elem 从其所在的列表中删除。

但是,您可能还需要注意两个条件。 elem 可以是列表的开头 (prad) 或列表的结尾 (pab),或两者兼而有之。因此,如果这些很重要(有时并不重要),请单独检查它们。

如果您想要/需要偏执,您还应该循环遍历列表(就像搜索例程一样,我假设您已经编写过)以确保 prad, pabelem 都是同一列表的一部分。

如果您需要更完整的整个过程指南,可以查看 full sample program可用于实现的每个列表操作。它可能不适用于您的应用程序,但至少会在您迷路时指明前进的方向。

编辑:在更深入地进行翻译尝试后,我现在明白发生了什么。删除 elem 参数的重复项更有意义。

我的第二段是重要的一段。你需要一个循环。您生成的代码甚至有一个循环的空格,其中的缩进看起来很奇怪。它应该看起来像:

while (g != NULL) {
/* Your existing, indented code here */
g = g->kitas;
}

关于c - 我需要从 c 中的列表中删除相同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22662827/

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