【问题标题】:How do I use a do while loop to reverse a circular linked list in Java?如何使用 do while 循环来反转 Java 中的循环链表?
【发布时间】:2021-11-18 12:15:08
【问题描述】:

我目前正在创建一个非常标准的循环链表,并且想要反转它。如果给定 3 个节点 Purple、Happy 和 Rabbit,它应该返回 Rabbit -> Happy -> Purple。现在,出于某种原因,它打印出快乐 -> 紫色 -> 紫色。我认为我的 do while 循环中的逻辑存在问题,因为我对链表很陌生。

我没有包含用于定义节点函数的其他类,因为它们包含其他不相关的代码很长,而且我知道问题不存在(向前打印工作正常)。任何指针表示赞赏,如果需要其他任何东西,请告诉我!

public void reverse() {
        String result = " ";
        Node current = head;
        if (current != null) {
            do {
                current = current.prev;
                result += current + ", ";
            } while (current != head);
        } else {
            result += "EMPTY";
        }
        System.out.println(result);
    }

【问题讨论】:

  • 您的代码对我来说看起来不错,但原始列表似乎不像您期望的那样循环链接。在我看来,您的头不是引用列表中的第一个元素,而是最后一个元素 (RABBIT)。并且您的结构是 PURPLE -> HAPPY -> RABBITPURPLE 自我引用,因为它是父级,而 RABBIT 没有子级。基本上是PURPLE PURPLE HAPPY RABBIT -> null
  • 好点。经过进一步调查,我意识到我正在处理一个循环双向链表,所以我猜我必须稍微改变我的方法。
  • 我看不出您的代码有任何问题。问题在于head,您应该在if (current != null) 之前打印它以进行调试。很可能它具有价值,Rabbit

标签: java list while-loop


【解决方案1】:

使用descendingIterator

    LinkedList<String> list = new LinkedList<>();
    list.add("Purple");
    list.add("Happy");
    list.add("Rabbit");
    for (Iterator<String> iterator = list.descendingIterator(); iterator.hasNext(); ) {
        String next =  iterator.next();
        System.out.println("next = " + next);
    }

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2021-07-27
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多