gpt4 book ai didi

c++ - 从 C++ 中的链表中删除一个元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:44 26 4
gpt4 key购买 nike

我现在正在尝试学习 C++,因为我必须参加一个类(class),而且我来自 Java。我目前正在阅读“Jumping into C++”一书并完成练习。阅读链表部分后,它告诉我创建自己的链表并有一个删除元素的方法(在练习中使用指针)。

到目前为止,我已经能够向我的链表添加值,并显示我的链表。在执行删除元素方法并让我的程序明确告诉我它已删除特定内存地址处的值后,我再次显示该列表,发现我的值仍然以某种方式出现在应该已删除的内存地址处。

这是我的 removeElement 方法:

// remove an element from the linked list
void removeElement(int remValue) {
// to remove an element, we go through the list, find the value given
// if we find it, stop
// to remove, disconnect the link
// relink the two values now (ie. value 1->2->3->NULL, 2 is removed, 1->3->NULL )
LinkedList* current = head;
LinkedList* next = current;
while(current != NULL) {
if(current->value == remValue) { // if match
break; // break out of while
}
else {
cout << "Value " << current->value << " does not match " << remValue << ".\n";
next = current; // save in case
current = current->pNextValue; // go to next value
}
} // end while
if(current == NULL) { // if we reached end of list
cout << "Can't remove value: no match found.\n"; // no match, cant remove
} else { // found match
cout << "Deleting: " << current << "\n";
delete current;
current = next->pNextValue; // current is updated
}
}

这是我的链表的完整代码(包括一些测试以查看东西的去向):

http://pastebin.com/cHZr4cBa

我意识到我的大部分代码对于实际的链表来说效率不高而且不正常,我只是想找出指针以及如何在最基本的链表中使用它们。

最佳答案

您实际上并没有取消链接您删除的节点。

您需要跟踪previous 节点,并使其next 指针指向当前节点的next 节点。还要考虑要删除的节点是第一个节点的特殊情况。

关于c++ - 从 C++ 中的链表中删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599343/

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