从单个排序的链表C ++中删除一个元素

时间:2013-04-17 23:16:56

标签: c++

我有一个已排序的链接列表,我试图创建一个函数来删除用户传递给nameToSearch的任何内容。但我一直在犯错。以下是我到目前为止的内容

void deleteProduct(NodePtr head, char* nameToSearch)
    {
        NodePtr nodeUnderEdit = findNodeByName(head, nameToSearch);
        if (nodeUnderEdit == NULL) 
        {
            cout<<"\n ERROR: Product not found \n";
        }
        else
        {

            delete nodeUnderEdit;
            nodeUnderEdit = nodeUnderEdit->next;

        }   

    }

3 个答案:

答案 0 :(得分:6)

  delete nodeUnderEdit;
  nodeUnderEdit = nodeUnderEdit->next;

如果您先删除nodeUnderEdit,则nodeUnderEdit->next将会丢失。 您需要首先确保nodeUnderEdit下一个节点连接到nodeUnderEdit->next之前的节点,然后您可以执行删除。

答案 1 :(得分:2)

单链表总是存在问题。

出现问题是因为从链接列表中删除当前节点需要修改 previous 节点中的指针 - 您无法直接访问该节点。

处理此问题的一种方法是使用带有标记的列表(包含您认为是列表末尾的值的最终节点)。在这种情况下,您可以将 next 节点中的值复制到当前节点,然后从列表中删除下一个节点。

答案 2 :(得分:1)

要删除单链表中的项目,必须将指针从Previous记录更改为指向Next记录。您的“findNodeByName”仅仅找到具有匹配名称的节点是不够的。它必须在排序顺序中找到其前一个节点,然后设置要删除的记录的下一个点的记录的Next指针。只有在更新了Previous记录的Next指针后,才能删除搜索到的记录。