【问题标题】:How to implement getPrevious() method for double linked list?如何为双向链表实现 get Previous() 方法?
【发布时间】:2013-10-28 10:53:37
【问题描述】:

我们从上次赋值中获得了以下代码,用于单链表,但我们应该添加getPrevious()setPrevious() 方法。当我完成作业并获得 100% 时,以下代码适用于单链表。

我在网上搜索并阅读了我的书,但找不到解决方案。 对于单链表,我将从头开始并迭代直到getNext() == current 或类似的东西。显然这超出了双向链表的目的,所以有什么想法吗?

public class Node
{
    private Object item;
    private Node next;

    public Node()
    {
        this.next = null;
    }

    public Node(Object newItem)
    {
        this.item = newItem;
        this.next = null;
    }

    public Node(Object newItem, Node newNext)
    {
        this.item = newItem;
        this.next = newNext;
    }

    public Object getItem()
    {
        return this.item;
    }

    public void setItem(Object newItem)
    {
        this.item = newItem;
    }

    public Node getNext()
    {
        return this.next;
    }

    public void setNext(Node newNext)
    {
        this.next = newNext;
    }
}

【问题讨论】:

    标签: java list linked-list


    【解决方案1】:

    您只需要添加一个类似于next 的额外成员,该成员将指向列表中的前一个节点。完成之后,添加一个 getter 和一个 setter 就很简单了。

    (当然,您需要更改链表的实现以正确填充此新成员。)

    【讨论】:

    • 感谢您的回复!你能解释一下连续调用 getNext 方法实际上是如何返回下一项的吗?我知道它返回 this.next,它是一个节点。但是返回节点如何使当前节点向前移动呢? (我会假设它对 getPrevious 的工作方式相同?)再次感谢!
    【解决方案2】:

    那么……问题出在哪里?

    Node previous;
    
    public Node getPrevious() {
      return previous;
    }
    
    public void setPrevious(Node node) {
      this.previous = node;
    }
    

    如果要将列表设为doubly-linked-list,则必须实现“其他”反向链接。您可以通过为每个节点添加另一个字段来实现。而且每次修改列表时还必须更新字段。

    【讨论】:

    • 感谢您的回复!我在想和你给我编码一样的事情。但我不明白的是,链接(下一个和上一个)实际上是如何创建的。例如: public Node getNext() { return this.next;假设我们创建了一个列表,调用这个 getNext 方法实际上是如何返回 NEXT 项的?每次我们调用 getNext() 时,是否有某种隐藏的“计数器”会增加?换句话说,每次返回 this.next 如何使节点“计数器”向前移动?我想如果我理解了 getNext 部分,那么 getPrevious 会很容易实现。谢谢!
    • 这些链接是对其他节点的引用。当您插入/删除一个节点时,您必须设置它的下一个/上一个和它的前任/继任者下一个/上一个对该节点的引用。
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2011-06-03
    • 2018-03-14
    • 2014-03-18
    • 2019-11-23
    相关资源
    最近更新 更多