从链表末尾卸下0

时间:2014-04-13 21:18:36

标签: 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()返回第一个节点地址
  • 下课时是私人的,所以无法直接访问它。

3 个答案:

答案 0 :(得分:1)

这样做:

  1. 迭代整个列表,记下你发现值得保存的最后一个节点(使用结构保存列表头的init)。
  2. 删除所有以下节点。
  3. 这意味着两次迭代,但没有嵌套。 O(#oldlist + #removed)

    您当前的方法无效。

答案 1 :(得分:0)

我接近它的方法是拥有一个包含“最后一个非零节点”的变量,然后遍历列表直到找到结束。找到结束后,只需从“最后一个非零”中选择“下一个”节点,然后将“下一个”设置为NULL。

然后销毁列表末尾遗留的节点。

答案 2 :(得分:0)

实施 Mats Petersson 建议的逻辑变得更加简单

while(N->getNext()!=NULL){
        if(N->getData()!=0)
        t=N;
        N=N->getNext();
    }
    t->setNext(NULL);