从链表中删除节点会运行,但不会删除任何内容

Deleting a Node from a linked list runs but does not delete anything

本文关键字:删除 任何内 运行 链表 节点      更新时间:2023-10-16

我被困在从链表中删除节点上。我能够插入节点并显示所有节点,但我无法删除其中一个。我应该删除与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<函数未正确返回。对返回值的一次更改解决了所有问题。