正确设置指针

时间:2019-02-09 21:08:00

标签: java

我正在尝试修复本应采用用户输入节点然后显示从用户输入到目标节点的必要动作的方法。在该方法中, answer 表示目标节点。所以我的方法是,当答案有一个父项时,您先显示它,然后以这种方式继续,但是我的方法不能按预期工作。

例如,如果答案(目标)为7,并且用户输入5,则我希望此方法先说6,然后再说7,因为这是从输入到达到目标的步骤。但是我的方法先打印出6,然后打印出5。它将执行第一步,然后回溯到我的输入。我肯定这是指针的问题,但我似乎无法弄清楚。

     while(answer.getParent() != null){
        System.out.print(answer.getParent());
        answer = answer.getParent();

1 个答案:

答案 0 :(得分:0)

您可以使用堆栈,可以是您定义的堆栈,也可以是调用堆栈。要使用调用堆栈,您需要递归地编写代码。要使用用户定义的stack,您需要执行

Deque<String> steps = new ArrayDeque<>();
while (answer.getParent() != null) {
    steps.addFirst(answer.toString());
    answer = answer.getParent();
}

while (!steps.isEmpty()) {
    System.out.println(steps.removeFirst());
}

您还可以制作与answer.getParent()返回相同类型的堆栈,而忽略toString。但是我不知道类型,所以我没有尝试这样做。

递归方法类似于

public void displayPath(Node answer) {
    if (answer.getParent() == null) {
        return;
    }

    displayPath(answer.getParent());

    System.out.println(answer);
}

我称类型为Node。这可能是错误的,因为我不是正确的类型。我只是在猜。根据需要更换。

请注意,您必须在递归调用之后执行输出,以便在返回调用堆栈时将其输出。如果放在前面,它将以相反的顺序打印。

简而言之,您的代码以相反的顺序生成列表。因此,您必须以相反的顺序显示。我认为在这里谈论指针会使这个问题感到困惑。您正在从孩子爬到父母。因此,您的输出首先是孩子,然后是父母。但是,如果您的节点可以有多个孩子,则必须将孩子爬到父级。否则,您最终将要搜索整个树,而仍然必须存储路径。