我有一个方法,它引用了一个链表和一个int值。因此,此方法将计算并返回值在链接列表中发生的频率。所以,我决定上课,
public class ListNode{
public ListNode (int v, ListNode n) {value = v; next = n;)
public int value;
public ListNode next;
}
然后,该方法将以
开头public static int findValue(ListNode x, int valueToCount){
// so would I do it like this?? I don't know how to find the value,
// like do I check it?
for (int i =0; i< x.length ;i++){
valueToCount += valueToCount;
}
所以,我改变了这一部分,如果我递归地做了这个,那么我会有
public static int findValue(ListNode x, int valueToCount) {
if (x.next != null && x.value == valueToCount {
return 1 + findValue(x, valueToCount);}
else
return new findvalue(x, valueToCount);
那么,递归部分现在是正确的吗?
答案 0 :(得分:1)
您需要以某种方式知道列表的结束位置。让我们假设(因为这是最简单的方法),最后一个节点将next
设置为null。然后,您将使用此作为检查何时停止迭代:
public static int findValue(ListNode x, int valueToCount) {
ListNode currentNode = x;
int count = 0;
while (currentNode.next!=null) {
if (currentNode.value == valueToCount) {
count++;
}
currentNode = currentNode.next;
}
return count;
}
同样的方法可以用于递归解决方案,除了它有点麻烦,因为你需要将count
作为参数传递给你的递归函数调用。
答案 1 :(得分:1)
这看起来像示例代码中的错误:
return findValue(x, valueToCount +1);
您应该递增计数,而不是要搜索的值。另外不要忘记移动到下一个节点!所以这应该是:
return 1 + findValue(x.next, valueToCount);
答案 2 :(得分:1)
Little Lisper路径:
null的结果是什么 - null
什么是正常节点的查找结果 -
if (node.value == aValue)
return true;
如果找到
否则以递归方式尝试下一个节点
public boolean find(ListNode<T> n, T value)
{
if (n==null)
return false;
if (n.element.equals(value))
return true;
else
return find(n.next, value);
}
答案 3 :(得分:0)
为了帮助您入门,您会发现如果您使用非空findValue
运行ListNode
方法,则会触发无限循环。您需要在每次递归时将节点移动到next
。