我知道如何从单链表的前面删除节点,但我不知道如何从任意位置删除节点。
在我的具体问题中,我继续将整数值x传递给链表中的每个节点。我可以添加和删除,但是我需要编写一个函数,如果我已经识别出两个相同的x,我会删除另一个实例。
如果有人需要我到目前为止所做的例子,我可以提供我的代码示例。感谢任何和所有回复
另外,我正在使用单链表。
答案 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;
}