【问题标题】:Java - Reversing a Singly LinkedList with a for loopJava - 使用 for 循环反转单链表
【发布时间】:2016-06-07 15:56:14
【问题描述】:

所以现在的挑战是尝试使用 LinkedList L 并创建一个新的 LinkedList Reverse 与 L 的反向。我需要使用 forloop 来完成此操作。这是我目前所拥有的:

public void ReverseL(Intco obj) {
    ListNode p = obj.c;
    ListNode RevL = c;
    int index = obj.get_howmany();
    if (obj.c != null) {
        while (this.get_howmany() != obj.get_howmany()) {
            p = obj.c;
            for (int i = index; i <= 0; i--) {
                p = p.link;
            }
            RevL = new ListNode(p.info, RevL);
            howmany++;
            index--;
        }
    }
    c = RevL;
}

Intco 是我正在使用的课程。 Howmany 是 LinkedList 中有多少整数的计数器(它由我创建的插入方法递增)。

假设我将 4 个整数添加到 L,所以 L 将包含: L -> 5 -> 12 -> 25 -> 15 -> 空

对于 L,多少 = 4。

forloop 将遍历 L,直到达到第 4 个值,将第 4 个值插入 RevL。再次通过 L,但现在达到第 3 个值 (25),然后将第 3 个值插入 RevL。

我遇到的问题是我的输出是:

Reverse of L (Reverse): 
15
15
15
15

P: 
15
25
12
5

以防万一,这里是 LinkedList 的私有类:

private class ListNode {

    private int info;
    private ListNode link;

    public ListNode() {
        info = 0;
        link = null;
    }

    public ListNode(int i, ListNode next) {
        info = i;
        link = next;
    }
}

如你所见,它只是重复了我在原始链表中的最后一个整数。任何帮助将不胜感激!

【问题讨论】:

  • 这里的Intco L 是什么?
  • 它正在接收一个包含 LinkedList 的 Intco 对象 L。 @Bunti 我将其更改为 obj 以使其更加清晰。你问的是这个吗?
  • 你想用一个while 循环和for 循环来实现什么?而且,当您以相反的顺序进行迭代时,您会尝试访问当前节点的next 链接,该链接在循环的第一次运行中不存在。但是您需要有一种按索引访问每个元素的方法,以便您可以轻松访问实际的前一个节点。因为这是一个单链表,所以您不能以相反的顺序循环并使用 next 元素访问下一个元素
  • 使用 'while' 循环,我希望在 RevL 包含与通过方法传递的 obj 相同数量的整数之后,一切都停止。 'for'循环是遍历通过的obj。

标签: java linked-list reverse


【解决方案1】:

尝试改变

for (int i = index; i <= 0; i--) {
            p = p.link;
        }

for (int i = index; i >= 0; i--) {
            p = p.link;
        }

【讨论】:

  • 它会抛出 java.lang.NullPointerException 错误。我现在在上面添加更多细节
  • 是否在 p=p.link 行抛出?
  • 是的,在 p=p.link
【解决方案2】:

您可以实现一个名为 get(int index) 的函数。通过它运行 for 循环。 这个get函数会遍历n,n-1,n-2,...,2,1。

假设你有一个大小为 10 的列表。循环是这样的:

for(int i=size; i>0; i-- {
   get(index);
}

现在如何实现 get(int index)。因为它是一个单链表。除了从第一个遍历列表到所需索引之外别无他法。

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多