c++ - 从链表末尾移除 0

标签 c++ linked-list

我想删除出现在链表末尾的所有 zeors: 例子

5->6->0->5->0->0

应该变成

5->6->0->5

我已经试过了,但它不起作用:

ListNode * N=L.getHead(),*t;
while(N!=NULL){
    if(N->getNext()->getData()==0){
        t=N;
        while(N!=NULL && N->getData()==0){
            N=N->getNext();
        }
        if(N==NULL)
            t->setNext(NULL);
    }else
    N=N->getNext();
}

注意事项:

  • L是一个类的对象
  • ListNode 是另一个类
  • getHead() 返回第一个节点地址
  • next in class 是私有(private)的,因此无法直接访问它。

最佳答案

这样做:

  1. 迭代整个列表,记下您发现值得保存的最后一个节点(使用保存列表头的结构进行初始化)。
  2. 删除所有以下节点。

这意味着两次迭代,但没有嵌套。 O(#oldlist + #removed)

您当前的方法行不通。

关于c++ - 从链表末尾移除 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048571/

相关文章:

c++ - 使用 glog 记录无法正常工作

Linux 中的 C++ 串行通信

c++ - 当列表为空时 std::list:begin() 的行为

c++ - Node 12 (v8) - 将不推荐使用的代码转换为 "maybe"版本

c++ - C++ 中的 this->data 和 (*this).data 有什么区别

haskell - 为什么我的可变链表比不可变变体慢?

c++ - 是否可以删除链表中的最后一个节点?

java - java是如何在Java中实现LinkedList到ArrayList的转换的?

c - 从文件创建链接列表时程序总是崩溃

java - 在 LinkedList 中查找元素