data-structures - 如何从数据结构中的单链表中删除尾部
问题描述
我们不能轻易删除单链表的最后一个节点。即使我们维护一个直接指向链表最后一个节点的尾引用,我们也必须能够访问最后一个节点之前的节点才能删除最后一个节点。但是我们无法通过从尾部跟随下一个链接到达尾部之前的节点。访问该节点的唯一方法是从列表的头部开始,一直搜索列表。但是这样一系列的链接跳跃操作可能需要很长时间。
解决方案
只需使用一个 for 循环,从i=0
up to i<size
wheresize
是该单链表中的节点数。下面代码中的条件next.getNext().getNext()==null
检查下一个节点之后的节点是否具有null
对下一个节点引用的引用,即tail然后它只是设置null
下一个节点引用。
请参阅下面的方法。
public void removeLast() {
Node<E> next=head;
for(int i=0; i<size; i++) {
if(next.getNext().getNext()==null) {
next.getNext().setNext(null);
tail=next.getNext();
size--;
}
next=next.getNext();
}
}
注意: getNext()
返回下一个节点的引用。
由于getNext()
返回Node
类型引用所以我们可以调用next.getNext().getNext()
size
保持到目前为止创建的节点数。
推荐阅读
- python - Python Pandas:最后一行如何在组内及时关闭?
- ruby-on-rails - 组合相同的嵌套属性
- npm - npm audit - 如何确保我没有生产漏洞?
- regex - 在 Sublime Text 3 中创建一个不贪婪的正则表达式
- dictionary - 无效的过程调用或参数错误 vb 6
- php - 如何更改产品类别?
- android - 如何使用改造从android中的mysql获取数据
- ruby-on-rails - Rails:如何管理同步数据的两个表之间的关联?
- python - Tkinter 应用程序在 Windows 上运行,但不会在树莓派上打开窗口
- c# - 在 asp.net 中使用 sql 命令时,“字段列表”中的未知列“新”