使用Java中的helper函数获取数组中的索引(无参数)


public int posOfFinalNineFromEnd () {
return posHelper (first);
}
private static int posHelper(Node i) {
int result = posHelper(i.next);
if (result >= 0) { 
return result;
}
if (i.item == 9.0) {
return result+1;
}
return result-1;
}

首先,我知道这个代码一团糟。请对我宽容一点。我对Java很陌生。这让我犯了各种错误。重点是我需要找到索引,即给定列表中的最后9(即0,1,9,2,9将调用4(。如果9.0是最后一个索引,则返回0。如果没有9,就调用-1。

我还需要使用向后递归。我简直不知所措。我也不能使用contains((之类的其他函数,也不能简单地填充给定的参数。

我能够解决它,在某种程度上没有递归。这低于

if(first != null) {
int index = 0;
int indexTemp = 0;          
for (Node x = this.first; x != null; x=x.next) {
if (x.item == 5.0)
indexTemp = index;
index++;
}
index -= 1;
if (this.first.item == 5.0)
return index;
if (indexTemp == 0)
return -1;
return index - indexTemp; 
}
return -1;

}

然而,这段代码搞砸了,因为如果没有9,它就不会返回-1。其他一切都有效。但是,我正试图将两者结合起来,并解决这个问题。。。

这应该做到…

public int posOfFinalNineFromEnd()
{
return posHelper(first, 0);
}
private int posHelper(Node i, int index)
{
if (i == null)
{
return -1;
}
else
{
int result = posHelper(i.next, index+1);
return (result == -1) ? ((i.item == 9.0) ? index : -1) : result;
}
}

当然。。。这是一个扩展版本以及我的整个测试代码:

public class Node
{
public float item;
public Node next = null;

public Node(){}
public Node(float value)
{
item = value;
}

public Node add(float value)
{
next = new Node(value);
return next;
}    

}
public class LinkedList
{

public Node first;

public LinkedList() {}

public static void main()
{
LinkedList list = new LinkedList();
list.first = new Node(0);
list.first.add(1).add(9).add(2).add(9);

System.out.println("List contents:");
Node n = list.first;
while(n != null)
{
System.out.println(n.item);
n = n.next;
}

int lastNine = list.posOfFinalNineFromEnd();
System.out.println("Position of last nine: " + lastNine);
}

public int posOfFinalNineFromEnd()
{
if (first != null)
return posHelper(first, 0);
else
return -1;
}

private int posHelper(Node i, int index)
{
if (i == null)
{
return -1;
}
else
{
int result = posHelper(i.next, index+1);
if (result == -1)
{
if (i.item == 9.0)
{
return index;
}
else
{
return -1;
}
}
else 
{
return result;
}
}
}

}