链表删除节点C ++

时间:2019-03-16 09:04:10

标签: c++ linked-list

我有此链接列表。我唯一的问题在于此删除功能。我尝试空运行它,但无法正确解决。请有人解释

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();
}

1 个答案:

答案 0 :(得分:0)

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