-4

运行代码时出现库存溢出错误,但我不知道问题出在哪里。有人可以帮我解决这个问题吗?

这是给我错误的方法。我很确定这与我以递归方式插入节点的方式有关,但我不知道我做错了什么。

此方法的目的是在节点链接中找到正确的位置并将新项目插入那里。节点需要保持升值。我希望这有助于更好地解释目的。谢谢。

public class OrderedList< T extends Comparable<T> > {

    private ListNode<T> firstNode;
    private ListNode<T> lastNode;
    private String name; // the name is used in printing

    // constructor creates an empty ordered list with "ordered list" as the name
    public OrderedList() {   
        this( "ordered list" );    
    }

    // constructor creates an empty ordered list with a name
    public OrderedList( String listName ) {        
        name = listName;
        firstNode = lastNode = null;    
    }

    // insert an item into the right position of the ordered list
    public void insert( T insertItem ) {       
        if (isEmpty()) {           
            firstNode = lastNode = new ListNode<T>(insertItem);           
        }else {               
            if (insertItem.compareTo(firstNode.getData()) <= 0) {               
                firstNode = new ListNode<T>(insertItem, firstNode);               
            }else {                
                if (firstNode.equals(lastNode)) {                    
                    lastNode = new ListNode<T>(insertItem);                   
                }else {
                    T store = firstNode.getData();
                    firstNode = firstNode.getNext();                   
                    insert(insertItem);                    
                    firstNode.setNext(firstNode);
                    firstNode.setData(store);
                }
            }           
        }
    }

    public boolean isEmpty() {
        return firstNode == null;
    }
}
4

1 回答 1

1

在最后一个else区块中,您insert再次调用。所以这是一个递归函数,递归函数原则上容易受到stackoverflows的攻击。

如果你输入一些 println 语句和一个每步递增的计数器,你就可以看到发生了什么。

else {    
            T store = firstNode.getData ();    
            firstNode = firstNode.getNext ();    
            System.out.println ("depth: " + ++depth);
            insert (insertItem);    
            --depth
            firstNode.setNext (firstNode);
            firstNode.setData (store);    
        }

深度是用于调试目的的属性或静态变量。

于 2012-04-27T22:09:46.933 回答