我从头开始创建了链表,并添加了诸如 add ,删除, set , size 之类的方法等等。我还添加了一个简单的静态和递归 sort 方法,该方法接受“链接列表”引用作为参数,以便可以在称为sort(linkedList);
的Main类中使用,它返回一个排序的链表。
程序在Exception in thread "main" java.lang.StackOverflowError
和if (biggest.compareTo(nextNode.value) < 0) biggest = nextNode.value;
行中抛出 return sort(list);
。我希望sort方法按字母顺序对列表进行排序(我的“链接列表”由String元素组成)。
这是代码中的方法:
/**
* The sort method sorts the list in alphabetical order
* @param list list to be sorted
* @return sorted linked list
*/
static DD_RecursiveLinkedList sort(DD_RecursiveLinkedList list) {
DD_Node nextNode = head.next;
String biggest = head.value, smallest = tail.value; //by default biggest is the head, and smallest is the tail
if (isEmpty()) return null; //if list is empty, return null
do { //find the biggest and smallest value in the list
if (biggest.compareTo(nextNode.value) < 0) biggest = nextNode.value; //if nextNode is bigger than the biggest, biggest is nextNode
if (smallest.compareTo(nextNode.value) > 0) smallest = nextNode.value; //if nextNode is smaller than the smallest, smallest is nextNode
nextNode = nextNode.next; //update nextNode
} while (nextNode!=null); //loop until nextNode is null
set(0, biggest); set(size()-1, smallest); //set biggest as the head of the list, and smallest as the tail
// remove(biggest);//remove the biggest (head) from the list
// remove(smallest); //remove the smallest (tail) from the list
// list.add(0, biggest); //add the biggest to the sorted list as head element
// list.add(size()-1, smallest); //add the smallest to the sorted list as tail element
return sort(list); //sort the order of sorted list recursively
}
我已注释掉add
和remove
行,因为它们包含在错误中,所以我使用了add
和remove
方法,而不是set
和AUTH_USER_MODEL = 'your_app_name.User'
方法。 *clen = mlen + CRYPTO_ABYTES
方法,用指定的元素替换指定索引处的元素。
答案 0 :(得分:0)
这里的问题是,sort(list)方法将被无限次调用,从而导致Java堆栈溢出并且无法进一步在堆栈中存储任何变量。
return sort(list);
1. 因为没有限制说明应在什么条件下进行递归。停止。它将继续调用sort()。 -这会导致stackOverflow错误
2。由于remove()语句已注释。列表大小完全不变,因此也不会在isEmpty检查时停止。另外:无论您列出的是什么,bcoz最终总会返回null。