从链表中删除节点会运行,但不会删除任何内容
Deleting a Node from a linked list runs but does not delete anything
我被困在从链表中删除节点上。我能够插入节点并显示所有节点,但我无法删除其中一个。我应该删除与temp
拥有的相同数字匹配的acct
。这意味着acct2
将被删除,因为它与 temp
的数字 5678 匹配。一切都在运行并且没有错误,但是当我显示列表时,acct2
仍然存在,并且不会删除任何内容。我不知道为什么它没有被删除。会不会是deleteNode
函数不正确?
这是主要的。
LinkedList<CheckAcct> list;
vector<string> v = { "Cpt America", "Peter Parker" };
CheckAcct acct1(v, 1234);
list.insertNode(acct1);
v.clear();
v.push_back("Jon Snow");
CheckAcct acct2(v, 5678);
list.insertNode(acct2);
list.displaylist();
v.clear();
CheckAcct temp(v, 5678);
list.deleteNode(temp);
list.displaylist();
这是 LinkedList 类和 deleteNode
函数。
template <class T>
class LinkedList
{
private:
struct ListNode
{
T data ;
struct ListNode * next;
};
ListNode *head;
public:
LinkedList() { head = nullptr; }
~LinkedList();
void insertNode(T);
bool deleteNode(T);
void displayList() const;
};
template <class T>
bool LinkedList<T>::deleteNode(T toBeDeleted)
{
ListNode *pCur;
ListNode *pPre;
if (!head)
return true;
pCur = head;
pPre = NULL;
while (pCur != NULL && pCur->data < toBeDeleted)
{
pPre = pCur;
pCur = pCur->next;
}
if (pCur != NULL && pCur->data == toBeDeleted)
{
if (pPre)
pPre->next = pCur->next;
else
head = pCur->next;
delete pCur;
return true;
}
return false;
}
您的代码取决于要排序的列表。 我猜也许它没有排序? 如果是这种情况,你可以制作你的while循环和if语句:
while (pCur != NULL && pCur->data != toBeDeleted)
{
pPre = pCur;
pCur = pCur->next;
}
if (pCur != NULL)
我希望这将解决您的问题。
使用调试器帮助了一大堆。发现问题是operator<
函数未正确返回。对返回值的一次更改解决了所有问题。
相关文章:
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- C++ priority_queue与自定义比较器并删除任何项目
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 如何删除类内类类型的类成员指针
- C++ 中是否有任何内置阶乘函数?
- shared_ptr删除结构内的对象
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 无法通过 .erase 从矢量 c++ 中删除任何内容
- 如何添加到此代码中,以便它打印"b"而不删除任何内容?
- 如何在不删除任何字符的情况下将字符从字符串中的某个位置移动到其最前面
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- 在新的 c++11 项目中,我是否应该默认删除任何操作
- 如何在没有STL的情况下从2d阵列中删除任何未填充的插槽
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 从链表中删除节点会运行,但不会删除任何内容
- 是否有任何内置的 UTF 在 c++ 在窗口中
- 删除矢量内指针的适当方法
- 注册表:删除系统内每个本地用户的密钥
- 为什么可以删除任何函数,而只能删除默认的特殊成员函数