我有一个排序的链表,我试图创建一个函数来删除用户传递给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;

        }   

    }

===============>>#1 票数:6 已采纳

  delete nodeUnderEdit;
  nodeUnderEdit = nodeUnderEdit->next;

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

===============>>#2 票数:2

单链列表始终是一个问题。

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

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

===============>>#3 票数:1

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

  ask by user1896464 translate from so

未解决问题?本站智能推荐: