微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中的循环双向链表

如何解决Java中的循环双向链表

我目前正在研究 Java 中的循环双向链表。但是,我的教授说我们不要在我们的程序中使用名为 last(tail) 的字段。我还能如何引用最后一个节点?由于它是循环的,我知道我们可以使用第一个节点访问最后一个节点,但是如何?下面是我的 addLast 方法代码,我必须替换最后一个变量,因为我们不允许有 last。不允许为最后一个节点创建字段。

public void addLast(T element) {
    //Todo create the new node
    DoublyLinkednode<T> tmp = new DoublyLinkednode<>(element);

    //Todo adjust references for new node
    if (numNodes == 0) {
        first = tmp;
        first.setPrev(first);
        first.setNext(first);
        last = first;
        last.setNext(first);
    } 
    last.setNext(tmp);
    tmp.setPrev(last);
    first.setPrev(tmp);
    tmp.setNext(first);
    last = tmp;
   
    //Todo increase the numNodes variable
    numNodes+=1;
}

解决方法

双向链表有 2 个链接。让我们暂时使用常识,而不是盲目推迟您认为您的 TA 所说的任何内容:“双向链表”显然意味着“2 个链接”,否则这将是一个非常愚蠢的名字,不是吗?

所以,必须有 2 个链接。您似乎有这样的印象,即“您不能有指向尾部的指针”意味着“必须只有一个链接”。这不可能是正确的,“双向链表”和所有内容是什么。

正确答案大概是每个节点有 2 个链接,但这些链接不是“头和尾”,而是“下一个”和“上一个”。

对于环形列表(从最后一个元素向前移动让你回到第一个元素,从第一个元素向后移动让你回到最后一个),最后一个节点的“下一个”链接回到第一个节点,相反,第一个节点的“前一个”链接指向最后一个(因此它指向假设的“尾巴”会指向的同一事物)。

但是,这仅适用于链表结构中的第一个节点(这将是“prev”指向尾部的唯一节点)。

您的 TA 要么意味着如上所述“有下一个/上一个链接,而不是下一个/尾链接”,要么不知道他们在说什么。让我们给他们怀疑的好处;) – 因为这是家庭作业,我将离开数据结构的实际编写,使用包含字段 DoublyLinkedNode<T>DoublyLinkedNode<T> next,prev; 定义,作为您的练习。

,

我正在寻找的是引用最后一次使用 first.getPrev(),因为它是一个圆圈,最后一个在第一个之前。

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