当前位置: 首页 > 知识库问答 >
问题:

如何从链表中删除中间节点

董光霁
2023-03-14

我有一个单链表。如果我想从这个链表中删除一个已知的元素,我能做什么?

例如:节点*头;(44)节点*尾部;(39)

链接列表:44 27 59 13 45 39我们想从中删除45。得到:4427591339

我只知道从列表中删除第一个元素(如果元素(需要删除)是列表的第一个元素)。我得到了:头=头-

如何从列表中删除中间节点?

共有3个答案

弓方伟
2023-03-14

如果有值,请查看下一个节点中的值。如果这是您要查找的值,那么下一个节点就是要删除的节点,因此在保留指向下一个节点的指针以便可以删除它之后,可以使当前节点的下一个元素指向下一个节点的下一个元素。

// Assuming head is a non-const reference variable (or a global variable) 
if (head == NULL)
    return;
if (head->value == wanted)
{
    head = head->next;
    return;
}
for (Node *curr = head; curr->next != NULL; curr = curr->next)
{
    if (curr->next->value == wanted)
    {
        Node *old = curr->next;
        curr->next = curr->next->next;
        delete old;
        return;
    }
}
return;  // Possibly after reporting that the value wanted was not found
唐默
2023-03-14

这个伪代码可能会帮助你:-

void remove(int key) {
  Node* p  = head->next;
  Node*prev = head;
  while(p!=NULL) {

     if(p->data==key) {
        prev->next = p->next;
        free(p);
        break;           
     }
     prev = p;
     p = p->next;
  }
}
申屠弘图
2023-03-14

13将指向45作为其下一个元素,只需将其下一个元素更改为39。把45从内存中释放出来,只是为了保持内存干净。

 类似资料:
  • 我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果

  • 问题内容: 这段代码是一个表,可以选择“惰性名称”,“删除”,“显示”和“退出”。 该代码运行良好,但是我唯一的问题是如何删除节点中的所选名称 *我不知道如何删除节点。我应该在删除方法上加上什么? 问题答案: 要删除Node,您实际上需要更新它的上一个节点的位置以删除Node的位置,而剩下的Node最终将被垃圾回收。 如果要删除的节点是根节点,则只有一个问题,然后更新根节点。

  • 我在以递归方式从循环单链表中删除单个节点/值时遇到了一些问题(当然,如果可能的话)。我的代码只从中间删除,而不是从第一个或最后一个地方删除。 在以递归方式删除其中一个连接后,我不知道如何建立连接。我的意思是,如果我要删除第一个元素,那么我需要将最后一个节点连接到下一个节点。 这是我的代码: 参数和返回: 查找尾部功能:

  • 给定一个链表和一个指定的数据值,我想递归地删除包含所述数据的所有节点。(我已经找到了迭代的方法,但我想这样做)。我已将我的结构定义为: 为了删除,我做了这个助手函数,它(应该)返回指向我删除列表的头节点的指针: 然后我想在我的实际列表中使用它: 但这不起作用。看起来我的助手函数实际上不起作用,但我无法理解。出什么事了?

  • 本文向大家介绍C++删除链表中间节点的方法,包括了C++删除链表中间节点的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++删除链表中间节点的方法。分享给大家供大家参考,具体如下: 题目: 给定链表头结点head,实现删除链表的中间节点函数。 解题思路及代码: 快慢指针,快指针走两步,慢指针一步。 当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。 链表结构定义: 算法

  • 我理解得对吗?(从虚拟节点开始) dummy->a->b->c->d->dummy(环绕到dummy节点) 因此,如果我想删除第一个实际的数据段(A),我需要将它分配给一个临时变量。所以Node first=head.next。然后我需要有一个虚拟的头部引用“B”,所以我需要做head.next=first.next。这就是所有需要做的吗? 在从列表中删除任何节点N的情况下(假设它在列表中),这是