链接列表删除节点C

Linked list delete node c++

本文关键字:节点 删除 列表 链接      更新时间:2023-10-16

我有此链接列表adt。我唯一的问题是在此删除功能中。我尝试运行干燥,但无法正确弄清楚。请有人解释

void list::remove(int v)
{
    node *temp, *pre;
    temp = head;
    if(temp->data==v)
    {
        head = temp->next;
        delete temp;
        cout << endl << v << "has been deleted" <<endl;
        return;
    }
    pre = temp;
    while(temp!=0)
    {
        if(temp->data==v)
        {
            pre->next = temp->next;
            delete temp;
            cout << "nValue deleted" <<endl;
            return;
        }
        pre = temp;
        temp = temp->next;
    }
    cout << endl << v << "not found" <<endl;
}
int main()
{
    list l;
    l.insert(8);
    l.insert(9);
    l.insert(10);
    l.display();
    cout << "After deleting" <<endl;
    l.remove(9);
    l.display();
}

乍一看时,代码似乎是正确的。快速解释是:您正在制作两个节点指针,一个指向列表上的当前元素,一个指向上一个元素。第一种情况是,您要删除的元素在列表的开头(因此是头部)。在这种情况下,您将头移到下一个元素(head = temp->下一个)并删除节点。另一种情况是该元素在列表中的某个地方。使用while循环您扫描列表(pre = temp,temp = temp->接下来是将您移至下一个元素),并使用IF条件您检查是否是您要寻找的元素。