Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion LinkedList在特殊情况下不打印第一个元素_Recursion_Data Structures_Linked List - Fatal编程技术网

Recursion LinkedList在特殊情况下不打印第一个元素

Recursion LinkedList在特殊情况下不打印第一个元素,recursion,data-structures,linked-list,Recursion,Data Structures,Linked List,我不熟悉递归概念,在练习时遇到了一个无法进行逻辑推理的问题。 对于下面的代码段,链接的第一个元素没有打印出来,假设列表中有多个元素 public void foo(ListNode head) { foo1(head, head.next); } private void foo1(ListNode curr, ListNode nextNode) { if (nextNode == null) { return; } curr = nextNo

我不熟悉递归概念,在练习时遇到了一个无法进行逻辑推理的问题。 对于下面的代码段,链接的第一个元素没有打印出来,假设列表中有多个元素

public void foo(ListNode head) {
    foo1(head, head.next);
}

private void foo1(ListNode curr, ListNode nextNode) {
    if (nextNode == null) {
        return;
    }
    curr = nextNode;
    nextNode = curr.next;
    foo1(curr, nextNode);
    System.out.println(curr);
}
现在,例如,若列表有3个元素,如1->2->3->null,则只打印3和2。foo方法使用head元素进行了调用,head元素是一个元素,所以它不应该在输出中同样打印1。 请帮助我理解我在这里做错了什么。

curr=nextNode; ... System.out.printlncurr; 问题是,在打印之前,将curr设置为其后续项

私有void foo1ListNode curr{ 如果curr==null 回来 System.out.printlncurr; foo1curr.next; } 理由

原因是,在打印第一个元素之前,代码会将值从第一个元素更改为第二个元素。代码中还有一个问题,当我们传递一个元素时,它也不会打印该元素。因为考虑这一点,你有一个节点5,下一个节点是NULL。当您将此节点传递给foo1方法时,它立即达到nextNode为null的条件并返回,这里没有机会打印第一个节点5

我修改了您的相同代码,使其能够像预期的那样完美运行,请看下面

public void foo(ListNode head) {
foo1(head, head.next);
}

private void foo1(ListNode curr, ListNode nextNode) {
if(curr != null)
  System.out.println(curr);

if (nextNode == null) {
    return;
}
curr = nextNode;
nextNode = curr.next;
foo1(curr, nextNode);
}