当前位置: 首页 > 知识库问答 >
问题:

如何去除数据结构中单链表的尾部

马晓博
2023-03-14

我们不能轻易地删除单链表的最后一个节点。即使我们维护一个直接指向列表中最后一个节点的尾部引用,我们也必须能够在最后一个节点之前访问该节点,以便删除最后一个节点。但是我们不能通过从尾部跟随下一个链接到达尾部之前的节点。访问此节点的唯一方法是从列表的开头开始,在整个列表中进行搜索。但是这样一系列的链路跳转操作可能需要很长时间。

共有2个答案

贺博厚
2023-03-14

只需取一个从i=0i的for循环

请参见下面的方法

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保留到目前为止创建的节点数。

贝镜
2023-03-14

删除单链表中的最后一个节点至少需要O(n)个时间复杂度。

但是,这可以通过使用双链表在O(常量)中完成。

 类似资料:
  • 本文向大家介绍浅谈PHP链表数据结构(单链表),包括了浅谈PHP链表数据结构(单链表)的使用技巧和注意事项,需要的朋友参考一下 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区) 规定:基本数据类型,一般放在栈区 复合数

  • 我正在读取删除单链接列表的最后一个元素的算法。假设我有一个名为ListNode的链接列表对象: 我发现删除列表最后一个节点的方法是: 我很困惑这个代码是如何工作的,因为一切都是通过“节点”。然而,当返回头时,最后一个节点被删除。因此,我想知道它是如何工作的,是否与Java中的“价值传递”有关?

  • 谁能给我解释一下这个吗?

  • 问题内容: 嗨,有人可以给我一个解释(也许是一个例子),我将如何使用PHP从数字中去除尾随零。 例如: 将变成: 我正在尝试去除零,以使其更具可读性。我尝试使用,但这也替换了数字内的零(doh)。 谢谢= D 问题答案: 忘记所有的rtrim和正则表达式,坐标是浮点数,应将其视为浮点数,只需在变量前面加上即可将其从字符串转换为浮点数: 输出: 实际的结果是浮点数,但由于HTTP协议而作为字符串传递

  • 如果你想创建一个像这样的单链表: 这个列表有方法“追加”、“删除”、“printList”和“findElement”。有必要有尾巴吗?因为使用“最后”你可以地址最后一个节点。 那么,什么时候有必要拥有所有三个节点“头”、“尾”和“最后”?例如,当您想将排序的节点插入列表时?

  • 问题内容: 用Java创建链接列表的最佳方法是什么? 问题答案: 对于熟悉Java的开发人员来说,显而易见的解决方案是使用java.util中已经提供的LinkedList类。说,但是,由于某种原因,你想进行自己的实现。这是一个链接列表的快速示例,该链接列表在列表的开头插入新链接,从列表的开头删除并循环浏览列表以打印其中包含的链接。对此实现的增强包括使其成为双向链接列表,添加从中间或结尾插入和删除