0

I have a sorted linked list and im trying to create a function to delete whatever the user passes to nameToSearch. but i keep geting an error. Below is what i have so far

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;

        }   

    }
4

3 回答 3

6
  delete nodeUnderEdit;
  nodeUnderEdit = nodeUnderEdit->next;

如果您nodeUnderEdit先删除,nodeUnderEdit->next则将丢失。您需要首先确保在nodeUnderEdit的next之前连接到的节点nodeUnderEdit->next,然后您才能进行删除。

于 2013-04-17T23:19:05.247 回答
2

这始终是单链表的问题。

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

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

于 2013-04-17T23:21:08.577 回答
1

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

于 2013-04-17T23:22:03.760 回答