从链表中删除节点时的C ++问题

时间:2019-07-13 07:00:02

标签: c++ linked-list singly-linked-list

我正在尝试为链接列表编写一个remove函数,但是得到了一些奇怪的结果。每当我删除不是列表中最后一个节点的节点时,我都可以显示列表数据,直到被删除的节点为止。之后,我得到一组随机数据,程序结束。

在下面的代码中,如果我删除了“删除t;”,行,一切都按预期工作,但是一旦我添加了“删除t;”,线回到,它回到我一直看到的奇怪行为。我尝试过将t设置为等于head的地方,或者删除t的地方,但是无论我做什么,都会得到相同的结果。

void List::remove(int d) {
    Node *t, *prev;
    if (!head) return;
    t = head;
    if (head->data == d) {      
        head = head->next;
        delete t;
    }
    else {
        while (t != nullptr && t->data != d) {
            prev = t;
            t = t->next;
        }
        if (t) {
            prev->next = t->next;
            delete t;
        }
        else {
            cout << "value not found" << endl;
        }
    }
}

我正在使用for循环将整数0-9插入列表。如果然后尝试删除包含数字5的节点,则在尝试显示剩余数据时得到以下输出:

0

1

2

3

4

-572662307

按任意键继续...

我期望的地方:

0

1

2

3

4

6

7

8

9

0 个答案:

没有答案