我在编程方面仍然很陌生,所以对你的解释很慷慨。我在递归地实现insertAt方法时遇到了麻烦。基本上我需要它做的是将Object elem插入到列表的索引中而不使用任何循环。
public class ListInterfaceImplementation implements ListInterface{
private ListNode first;
private ListNode last;
private ListNode current;
private int size = 0;
public ListInterfaceImplementation(){
}
public ListInterface insertAt(int index, Object elem) {
// TODO Auto-generated method stub
ListNode cur = new ListNode(current);
if(index < 0){
throw new IndexOutOfBoundsException();
}
if(elem == null){
throw new NullPointerException();
}
if(index == 0){
ListNode node = new ListNode(elem);
node.getNext() = current.getNext();
current.getNext() = node;
size++;
return this;
}
cur = current.getNext();
return insertAt(index -1, elem);
}
这是我到目前为止所做的。
答案 0 :(得分:0)
一些建议:
if(elem == null){
throw new NullPointerException();
这应该也是一个超出范围的例外(因为如果你跑到列表的末尾,你将会得到这个)
private ListNode current;
这不应该是全局的 - 您希望整个状态包含在递归中
通常,逻辑应该是:
insertAt(list, index)
if index == 0, append the list to the node to insert and return the result
else return firstElementOfList + insertAt(listMinusFirstElement, index-1)
也就是说,我们的递归步骤通过减少列表和索引来简化。