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

时间:2015-10-13 21:49:07

标签: c++ dynamic-memory-allocation singly-linked-list

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

在我的具体问题中,我继续将整数值x传递给链表中的每个节点。我可以添加和删除,但是我需要编写一个函数,如果我已经识别出两个相同的x,我会删除另一个实例。

如果有人需要我到目前为止所做的例子,我可以提供我的代码示例。感谢任何和所有回复

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

4 个答案:

答案 0 :(得分:1)

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

希望这有帮助。

答案 1 :(得分:1)

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

因此,伪代码明智(为了更好地说明它),它将是这样的:

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

答案 2 :(得分:1)

因为每个节点只有一个指向后续节点的链接,所以您必须遍历整个列表以获取前一个元素,然后将前一个节点与下一个节点链接起来。 (接下来,就像你希望删除之后那样)

答案 3 :(得分:0)

node remove(node head,int d){

if(head==NULL)
    cout<<"empty linked list\n";
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 found\n";
    else {
        if(pre==NULL)
            head=curr->next;
        else
            pre->next=curr->next;
        curr->next=NULL;
      delete(curr); } 

}return head;

}