我需要从c中的list中删除相同的元素



有人能结束这个算法吗?

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;
            }
        }
}

(通过谷歌翻译将变量名翻译成英文)我相信这个问题应该是"有人能完成这个算法吗?")

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是立陶宛语的"上一个"one_answers"下一个",那么我们有一个双链表,我想我们正在删除一个元素。

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

但是既然你已经知道要删除的节点(elem),为什么要寻找它?从下面开始:

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

这将从它所在的列表中删除elem

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

如果你想要/需要偏执,你也应该循环遍历列表(完全像一个搜索例程,我假设你已经写了),以确保prad, pabelem都是同一个列表的一部分。

如果您需要更完整的过程指南,这里有一个完整的示例程序,其中实现了每个列表操作。它可能不适用于您的应用程序,但至少在您迷路时为您指明了前进的方向。

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

我的第二段是重要的一段。你需要一个循环。您生成的代码甚至有空格用于循环,其中缩进看起来很奇怪。它应该看起来像:
while (g != NULL) {
    /* Your existing, indented code here */
    g = g->kitas;
}

相关内容

  • 没有找到相关文章

最新更新