使用递归/helper函数计算链表的大小-Java
这里的初学者使用Java(一年级学生),我无法使用下面的函数。目标是使用递归和帮助函数来计算单链表的大小。当针对测试列表运行代码时,它会不断返回使用递归/helper函数计算链表的大小-Java,java,recursion,Java,Recursion,这里的初学者使用Java(一年级学生),我无法使用下面的函数。目标是使用递归和帮助函数来计算单链表的大小。当针对测试列表运行代码时,它会不断返回List改为[] 我一般都在努力学习Java,因此非常感谢您的帮助。多谢各位 public class MyLinked { static class Node { public Node(double item, Node next) { this.item = item; this.next = next; }
List改为[]
我一般都在努力学习Java,因此非常感谢您的帮助。多谢各位
public class MyLinked {
static class Node {
public Node(double item, Node next) {
this.item = item;
this.next = next;
}
public double item;
public Node next;
}
int N;
Node first;
public int sizeForward() {
return sizeForwardHelper(first);
}
public int sizeForwardHelper(Node n) {
Node current = first;
if (current == null) {
return 0;
} else {
first = first.next;
return sizeForward() + 1;
}
}
如果列表中没有元素,我相信我已经将第一部分设置为返回0。我相信是第二部分设置不正确
谢谢因为学习不要用勺子喂你很重要,我将描述一种方法,而不是提供代码 利用这一事实: 列表从任何给定节点到末端的长度为1加上从下一个节点(如果有)测量的长度 递归函数通常采用以下形式:
n==null
是一个明显的选择,您将返回0
,因为您已经跑完了列表的末尾,并且nothing(即无节点)的长度为nothing。这也会处理空列表(当first
为null
时),而不需要任何特殊代码
否则,返回1
(一个节点的长度)加上next
的长度
把这些放在一起,你就会得到答案
--
提示:如果使用三元表达式,递归帮助器方法的主体可以使用一个短行进行编码。因为学习不要用勺子喂你很重要,我将描述一种方法,而不是提供代码 利用这一事实: 列表从任何给定节点到末端的长度为1加上从下一个节点(如果有)测量的长度 递归函数通常采用以下形式:
n==null
是一个明显的选择,您将返回0
,因为您已经跑完了列表的末尾,并且nothing(即无节点)的长度为nothing。这也会处理空列表(当first
为null
时),而不需要任何特殊代码
否则,返回1
(一个节点的长度)加上next
的长度
把这些放在一起,你就会得到答案
--
提示:如果使用三元表达式,递归帮助器方法的主体可以使用一个短行进行编码。而不是调用包装器函数递归调用帮助器函数。请尝试以下操作:
public int sizeForward () {
return sizeForwardHelper (first);
}
public int sizeForwardHelper(Node n) {
if (n == null) // base case
return 0;
return sizeForwardHelper(n.next) + 1; // count this node + rest of list
}
不要调用包装器函数,而是递归调用帮助器函数。请尝试以下操作:
public int sizeForward () {
return sizeForwardHelper (first);
}
public int sizeForwardHelper(Node n) {
if (n == null) // base case
return 0;
return sizeForwardHelper(n.next) + 1; // count this node + rest of list
}
计算列表大小的方法实际上会在过程中修改列表(使用
first=first.next;
将第一个元素设置为next,并且由于存在递归,因此第一个元素最终总是为null,这相当于设计中的空列表)。您的方法只工作一次,但之后列表将为空
为了说明这一点,我在指令first=first.next
并编写了以下主要代码:
public static void main(String[] args) {
Node n2 = new Node(2d, null);
Node n1 = new Node(1d, n2);
Node n = new Node(0, n1);
MyLinked l = new MyLinked(n);
System.out.println("The first element is: "+l.first.item);
System.out.println("The size is: "+l.sizeForward());
System.out.println("The first element is: "+l.first);
}
它产生:
The first element is: 0.0
first is set to 1.0
first is set to 2.0
first is set to null
The size is: 3
The first element is: null
显然,在计算列表大小时不应修改列表。如果节点为null(空列表),helper方法应返回0,否则返回1加上列表其余部分的大小。这是代码
public int sizeForwardHelper(Node n) {
if (n == null)
return 0;
else
return sizeForwardHelper(n.next) +1;
}
无arg方法
sizeForward()
的目标就是调用助手。但是助手不应该使用它 计算列表大小的方法实际上会在过程中修改列表(使用first=first.next;
将第一个元素设置为next,并且由于存在递归,因此第一个元素最终总是为null,这相当于您设计的空列表)。您的方法只工作一次,但之后列表将为空
为了说明这一点,我在指令first=first.next
并编写了以下主要代码:
public static void main(String[] args) {
Node n2 = new Node(2d, null);
Node n1 = new Node(1d, n2);
Node n = new Node(0, n1);
MyLinked l = new MyLinked(n);
System.out.println("The first element is: "+l.first.item);
System.out.println("The size is: "+l.sizeForward());
System.out.println("The first element is: "+l.first);
}
它产生:
The first element is: 0.0
first is set to 1.0
first is set to 2.0
first is set to null
The size is: 3
The first element is: null
显然,在计算列表大小时不应修改列表。如果节点为null(空列表),helper方法应返回0,否则返回1加上列表其余部分的大小。这是代码
public int sizeForwardHelper(Node n) {
if (n == null)
return 0;
else
return sizeForwardHelper(n.next) +1;
}
无arg方法
sizeForward()
的目标就是调用助手。但是助手不应该使用它 我不明白为什么需要递归来计算单链表的元素。有没有明确说明在这个赋值中需要使用递归?我不明白为什么需要递归来计算单链表的元素。是否明确说明您需要在本作业中使用递归?谢谢。我尝试设置类似的,但是调用的是原始sizeForward,而不是helper。但是,当我将代码调整到上面的值时,public int sizeForwardHelper(节点n){I get a'方法结果必须包含int'类型的错误+1;表示无法访问的代码?有任何关于如何修复此问题的提示吗?Diregard,我编辑了我的if/else以使所有内容正常工作。谢谢!谢谢。我尝试设置类似的,但是调用的是原始sizeForward,而不是helper。但是,当我将代码调整为上述值时,public int sizeForward Helper(Node n){I get a'方法结果必须包含int'错误类型