c++ - 我将如何在不破坏链表的情况下删除链表中的节点?

标签 c++ memory-management linked-list

template <class T>
bool LinkedList<T>::remove(const T object){
  Node<T> *cur = head;
  while(cur->next != NULL){
    if(cur->next->value == object){
      Node<T>* temp = cur->next->next;
      delete cur->next;
      cur->next = temp;
      s--;
      return true;
    }
    cur = cur->next;
  }
  return false;
}

我在分配后删除对象。当我打印出这些值时,节点似乎已损坏。这是从链表中删除项目的最佳方式吗?

最佳答案

Nodes destructor is just "delete next".

糟糕。如果每个节点在其析构函数中删除下一个节点,这将导致从该点开始的整个列表被删除!

  Node<T>* temp = cur->next->next; // the node temp points to is clearly after cur
  delete cur->next; // deletes everything after cur
  cur->next = temp; // temp no longer points to a valid node

关于c++ - 我将如何在不破坏链表的情况下删除链表中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575778/

相关文章:

c++ - 通用 lambda 的元数

python - 如何从给定模型中获取 Graph(或 GraphDef)?

java - 删除链表中的重复值(Java中的递归)

c++ - 为什么 Struct *node next 适用于 C++ 中的链表?

c - 反转链表

c++ - 从文件 (C++) 中读取函数(和 "create")

c++ - 混淆测试fftw3——泊松方程2d检验

memory-management - 应用程序怎么可能拥有静态内存地址?

java - 为什么我的应用程序的堆内存比其他应用程序少?

c - 如何释放在函数中分配但地址由该函数返回的内存?