我想删除链接列表末尾出现的所有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();
}
备注:
getHead()
返回第一个节点地址答案 0 :(得分:1)
这样做:
这意味着两次迭代,但没有嵌套。 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);