gpt4 book ai didi

c - 删除链接列表中先前的重复条目

转载 作者:行者123 更新时间:2023-11-30 17:15:22 24 4
gpt4 key购买 nike

我的链接列表具有以下结构。

typedef struct value value;

struct value{
value* prev;
value* next;
int value;
};

...
//ent = entry
if(entry_head == NULL) {
entry_head = ent;
entry_tail = ent;
entry_tail->prev = NULL;
}
else { // add to top
ent -> next = entry_head;
ent -> prev = NULL;
entry_head -> prev = ent;
entry_head = ent;
}

这给了我结果:

Input: a       Result: b
b a

但是,当我输入两个相同的变量时,我想删除前一个变量并仅保留新输入的变量。即。

Input: a // old    Result: a // new   Actual Result: a // new
a // new a // old

如何修改它以删除旧变量?

最佳答案

您需要修改添加节点代码,在函数中处理添加到非 NULL 列表的所有节点的部分。

value *tmp =head ;
while(tmp!=NULL) {
if(tmp->Value== newval) break;
tmp=tmp->next;
}
If(tmp!=NULL) return 0;
// add node here

return 1

或者在添加节点后,创建一个类似的 while 循环。

对于列表中的每个节点,必须比较并删除此后的所有节点。这将是高效的。

要删除节点,您要做的就是一些指针旋转,然后在不再需要时释放该节点以避免内存泄漏

// a->B->c
// <- <-

value *save=a->next;

a->Next=save->next;

// node c

Save->Next->prev=save->prev;


free(save);

此代码尚未经过测试,我的手机上没有linux。

关于c - 删除链接列表中先前的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010382/

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