删除链表中任意位置的节点

deleting a node anywhere in a linked list

本文关键字:节点 位置 任意 链表 删除      更新时间:2023-10-16

我知道如何从单链表的前面删除一个节点,但是我不知道如何从任意位置删除一个节点。

在我的具体问题中,我继续向链表中的每个节点传递一个整数值x。我可以添加和删除,但是我需要编写一个函数,如果我确定了两个相同的x,我就删除另一个实例。

如果有人需要我到目前为止所做的事情的例子,我可以给出我的代码的例子。感谢所有的回复

另外,我正在使用一个单链表。

这是单链表的缺点。它需要迭代来执行删除,因为您无法找到任意元素的前一个元素。你能找到的是它的下一个元素。您必须从列表的头部开始迭代以找到它的前一个元素。

因为每个节点只有到后续节点的链接,所以您必须遍历整个列表以获得前一个元素,然后将前一个元素与下一个节点链接起来。

当我在查看列表时,我所做的是:当遍历列表时,我将指向前一个元素的指针保存在一个单独的变量中,如果我决定需要删除当前元素,我已经拥有指向前一个元素的指针了。

所以,伪代码方面(为了更好地说明它),它应该是这样的:
prevValue = NULL
for curValue = root; curValue != NULL; curValue = curValue->Next
LOOP
IF *need to delete curValue*
THEN
    IF prevValue == NULL
    THEN
        root = curValue->Next
        delete curValue
        curValue = root
    ELSE
        prevValue->Next = curValue->Next
        delete curValue
        curValue = prevValue
    END IF
END IF
prevValue = curValue
END LOOP

删除节点(节点头,int d) {

if(head==NULL)
    cout<<"empty linked listn";
else {
    node*curr=head,*pre=NULL;
    while (curr!=NULL && curr->data !=d)
    {
        pre=curr;
        curr=curr->next;
    }
    if(curr==NULL)
        cout<<"Mahloch this number not foundn";
    else {
        if(pre==NULL)
            head=curr->next;
        else
            pre->next=curr->next;
        curr->next=NULL;
      delete(curr); } 
}return head;

}