簡體   English   中英

從單個排序的鏈表中刪除元素C ++

[英]remove an element from a singly sorted linked list 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;

        }   

    }
  delete nodeUnderEdit;
  nodeUnderEdit = nodeUnderEdit->next;

如果先刪除nodeUnderEdit ,則nodeUnderEdit->next將丟失。 您首先需要確保nodeUnderEdit的下一個節點之前的節點已連接到nodeUnderEdit->next ,然后可以進行刪除。

單鏈列表始終是一個問題。

出現問題是因為從鏈接列表中刪除當前節點需要修改前一個節點中的指針-您無法直接訪問該節點。

處理此問題的一種方法是使用帶有標記的列表(包含識別為列表結尾的值的最終節點)。 在這種情況下,您可以將值從下一個節點復制到當前節點,然后從列表中刪除下一個節點。

要刪除單鏈列表中的項目,必須將指針從“上一個”記錄更改為指向“下一個”記錄。 僅讓“ findNodeByName”查找具有匹配名稱的節點是不夠的。 它必須按排序順序找到它的上一個節點,然后將要刪除的記錄的下一個點的該記錄的下一個指針設置為。 只有更新了上一個記錄的下一個指針后,才能刪除搜索的記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM