如何以递归方式在链表中的某个索引处插入节点

时间:2014-10-16 02:58:09

标签: java recursion linked-list

我在编程方面仍然很陌生,所以对你的解释很慷慨。我在递归地实现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);

}

这是我到目前为止所做的。

1 个答案:

答案 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)

也就是说,我们的递归步骤通过减少列表和索引来简化。