链表实现,是在开头还是在结尾添加?

如何解决链表实现,是在开头还是在结尾添加?

| 我已经看到了链表的许多实现,这些实现在头添加,然后更新头参考,或者不修改头参考,而在尾添加,每次更新它。一个人与另一个人相比有明显的好处吗?哪一种是首选的实现方式?     

解决方法

根本没有好处。实际上,唯一使头部成为头部而使尾部成为尾部的是我们称一个为头部而一个为尾部。您可以将head替换为tail,然后将tail替换为head,您将拥有相同的确切列表,只是列表为“ backwards。”(这确实是一个双向链表...)。 有点像物质和反物质...     ,链表的绝对最简单的实现只能(有效)添加在最前面。为了添加到尾部,您需要第二个指针指向当前的最后一个元素。 用户可能希望能够添加到任一端,以及能够在恒定时间内查询列表长度,并从尾到头遍历列表(这意味着您需要一个双向链接的列表),因此是一个合理的默认实现应该支持这一点(就像java.util中的那样)。 如果您可以证明有限的功能是合理的,并且从中获得一些实际的利益(例如,通过分尾共享以减少存储需求),则只会使用单链接列表。 ConcurrentLinkedQueue似乎是单链接的,以允许无锁并发。 Javadocs中提到了无法知道当前长度的折衷。     ,java.util.LinkedList实现两种功能。它使其具有通用性-可以将其用作队列(FIFO)和堆栈(LIFO)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?