Спасибо за чтение. У меня в основном есть односвязный список с родовыми элементами (в итоге он перешел в строки) ... Я попытался отсортировать их с помощью сортировки слиянием, но по какой-то причине я получаю ошибку переполнения стека.Кажется, что мои рекурсии продолжаются бесконечно, но у меня есть условие, чтобы остановить это ... Вот что у меня есть, класс связанный список - это просто универсальный класс связанный список с insertfirst и insertlast.`public class app {
public static void main(String[] args) {
sLinkedList newList = new sLinkedList();
newList.insertLast("APPLE");
newList.insertLast("BPPLE");
newList.insertLast("DPPLE");
newList.insertLast("CPPLE");
newList.insertLast("GPPLE");
newList.insertLast("FPPLE");
newList.insertLast("ZPPLE");
newList.insertLast("RPPLE");
sort(newList);
newList.displayList();
}
public static void sort(sLinkedList list) {
sort(0,list.length-1,list);
}
public static void sort(int beginning, int end,sLinkedList list) {
if(end <= beginning) {
return;
}
int mid = (beginning+end)/2;
sort(beginning,mid,list);
sort(mid+1,end,list);
merge(beginning,mid,end,list);
}
public static void merge(int start, int mid, int end,sLinkedList list) {
sLinkedList tempList = new sLinkedList();
int left = start;
int right = mid+1;
int k = 0;
while(left<mid && right<end) {
if(list.get(left).compareTo(list.get(right))==-1) {
tempList.insertLast(list.get(left));
left = left+1;
}else {
tempList.insertLast(list.get(right));
right++;
}
k++;
}
if(left<=mid) {
while(left<=mid) {
tempList.insertLast(list.get(left));
left++;
k++;
}
}else if(right<=end) {
while(right<=end) {
tempList.insertLast(list.get(right));
right++;
k++;
}
}
sllNode current = list.first;
for(int i=0;i<start;i++) {
current = current.next;
}
for(int i=0;i<tempList.length;i++) {
current.data = tempList.first.data;
current = current.next;
tempList.first = tempList.first.next;
}
}
}`
Еще раз, большое спасибо.Я пытаюсь получить список в алфавитном порядке, поэтому в основном Apple - Bpple - Cpple - Dpple - ...... и т. Д.
Ошибка возникает в строке 30