C++ 按值从单个链接列表中删除
所以我一直在尝试筛选我的列表。列表创建和填写正确,但我从文档中两次获得了一些条目。应该是这样的。现在我试着把它们过滤掉,我想我已经有了一个很好的想法,但是它不能正常工作C++ 按值从单个链接列表中删除,c++,C++,所以我一直在尝试筛选我的列表。列表创建和填写正确,但我从文档中两次获得了一些条目。应该是这样的。现在我试着把它们过滤掉,我想我已经有了一个很好的想法,但是它不能正常工作 Anmeldung* delete_object(Anmeldung* b){ Anmeldung* tmp = b; b = b->next; delete(tmp); return b; } void filter_list(Anmeldung* b){ Anmeldu
Anmeldung* delete_object(Anmeldung* b){
Anmeldung* tmp = b;
b = b->next;
delete(tmp);
return b;
}
void filter_list(Anmeldung* b){
Anmeldung* tmp = b;
while(b!=NULL){
std::string info = b->Matrikelnummer;
while(tmp!=NULL){
if(tmp->Matrikelnummer == info){
tmp = delete_object(tmp);
}else
tmp = tmp->next;
}
b = b->next;
tmp = b;
}
}
所以我尝试遍历我的列表,并将每个值与整个列表进行比较。我正在搜索的值是Matrikelnummer
,如果两个人获得相同的Matrikelnummer,则删除一个人
这是我的结构。这是我的教授提供的:
struct Anmeldung {
Anmeldung* next;
std::string Nachname; // Name Teilnehmer
std::string Vorname; // Vorname Teilnehmer
std::string Email; // Email Adresse Teilnehmer
std::string Matrikelnummer; // Matrikelnr. Teilnehmer
std::string Studienrichtung; // Studienrichtung Teilnehmer
std::string Semester; // Studiensemester Teilnehmer
std::string G1name; // Name Wunschkandidat fuer Praktikumsgruppe
std::string G1vorname; // Vorname Wunschkandidat
std::string Anmerkung; // Freier Text
};
我认为while
循环是正确的,delete\u对象
是错误的,但我看不出在哪里或如何。
我不允许使用集装箱清单或类似的东西。我只得到了结构。因此,没有双链接列表,什么都没有。当您调用
delete\u object()
时,如果不删除正在传递的对象,则删除链接列表中的下一个条目。因此,您的if()
语句正在查找要删除的正确节点,但随后您将继续删除该节点之后的节点。您应该解决这个问题(但一定要保留在删除节点之后返回节点的一般想法)
此外,如果调用了无条件的
tmp=tmp->next
,则会导致跳过由delete\u object()
返回的节点。您可能应该将该语句放在else
子句中,因为一旦您修复delete_object()
,它也将返回您要继续使用的下一个节点。尚未查看详细信息,但在过滤器列表中,您有Anmeldung*tmp=b
,意思是如果(tmp->Matrikelnummer==info){
总是正确的。但是我用delete_对象重新分配tmp
,或者?所以tmp应该有以下对象的值?不,只有与Matrikelnummer
值相同的对象。不幸的是,德语中的“注册”一词听起来像是英语短语“动物粪便”…好吧,我明白了!所以在我的delete_object()中
我应该写tmp=b
和b=b->next
?但这仍然不起作用..我在某处丢失了指针。我得到了退出代码11。我在顶部更新了我的代码。不,不是吗?我正在通过我的列表对tmp=tmp->next进行迭代;
调用函数时,if(tmp->matrikelnumer==info){
将在tmp=tmp->next
之前被处理,对吗?@HenningWilmerOh是的,你是对的。我甚至没有意识到这一点,因为我总是得到退出代码11。。