【问题标题】:How do I implement getPrevious method in singly linked list in Java如何在 Java 的单链表中实现 getPrevious 方法
【发布时间】:2011-04-03 18:50:33
【问题描述】:

我要实现:

public Object getPrevious(); and reset() method.

* 它应该返回使用与 getNext() 相同的内部维护指针, * 返回列表中紧接上次返回的项目之前的节点的内容 * 通过 getNext() 或 getPrevious()

并且 reset 将重置列表,以便 getPrevious() 和 getNext() 从头开始​​,它应该表现得好像我们从未调用过这些方法。

在单链表中。我已经实现了:

public int length();
public Object first();
public Object last();
public boolean lookup(Object obj);
public Object get(int n);
public void add(Object o);
public int find(Object obj);
public void delete(Object obj);
public void delete(int n)

【问题讨论】:

  • 这就是他们发明双向链表的原因。
  • 到目前为止你能发布你的代码吗?
  • 在你的情况下 get(int n) 的目的是什么?
  • @smas,必须访问列表中第n个索引处的元素,就像java.util.List一样。

标签: java linked-list


【解决方案1】:

到达前一个节点的唯一方法是从头开始,直到找到一个节点,其“下一个”节点就是您要查找的前一个节点。它效率低下,这就是为什么双链表通常比单链表更受欢迎的原因。 (函数式编程语言中的列表例外,它们通常是不可变的......您可以通过记住“头”列表和新的尾值来有效地“附加”到不可变的单链表。这不起作用如果列表必须是双向链接的。)

【讨论】:

    【解决方案2】:

    大多数情况下,您可以在Node 上使用getNext(),您只需调用node.getNext().getValue()(如果您有带有两个字段的Node - Object valueNode next。好吧,您可以使用@ 987654327@,这样您就可以以相反的顺序遍历列表(并且您必须存储尾部而不是头部)

    列表本身上的getPrevious()(或getNext())意味着列表拥有迭代位置,通常情况并非如此。

    【讨论】:

      【解决方案3】:

      是否可以在保持单链表的同时做到这一点?是的,但你应该在做之前停下来想一想。如果这是为了学校作业或其他事情;那么这个问题很可能是修辞性的,旨在让您思考链表的性质。因此,除非您的学校作业(再次 - 我只是假设这是针对学校的)明确说明“为单链表实现 getPrevious 方法”,否则我不会这样做。

      链表的概念并不特定于 Java。它指的是一个普遍接受的关于如何最好地表示数据集合的定义,这样单向迭代(因此称为单链表)非常快。换句话说,假设您有一个待办事项清单;而且你知道你总是会按顺序浏览你的待办事项清单,而且你清单上的所有任务都是相互独立的;因此,您永远不必知道接下来要做什么 2 或 3 项任务。在这种情况下,您将使用单链表。

      这里的重点是您可能问错了问题。而不是问; “我如何获得单链表中的前一个元素”你应该问“链表真的是这里最有用的数据结构吗?”一旦您考虑到这一点,我建议您查看@Bart Kiers 评论的doubly-linked list

      【讨论】:

        【解决方案4】:

        我猜你有关于当前元素有索引的信息(如果不使用find() 方法),所以基本上你可以调用:

        public Object getPrevious() {
            Object result = null;
            if (currentNumber > 0) {
                result = get(currentIndex - 1);
            }
            return result;
        }
        

        另一种解决方案是实现 findPrevious():它会从头迭代到当前节点并记住前一个节点是什么,然后返回它

        【讨论】:

        • 我没有当前索引。到目前为止,我已经发布了代码。我需要实现 getPrevious 和 reset()
        • 所以使用你的 find() 来查找 currentIndex
        • 但是对象会是什么。我如何跟踪对象。因为它应该返回 getNext() 返回的内容。
        • 对于 clear method() 的任何见解也将不胜感激。谢谢
        猜你喜欢
        • 2020-07-15
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 2019-09-02
        • 2011-06-07
        相关资源
        最近更新 更多