Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按值从单个链接列表中删除_C++ - Fatal编程技术网

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。。