[英]Merge Sort on Linked List giving me stack overflow
感谢您的阅读。我基本上有一个带有通用元素的单链列表(最终以字符串形式传递)...我试图通过合并排序对其进行排序,但是由于某种原因我收到了堆栈溢出错误。 看来我的递归无休止地进行着,但是我确实有一个条件可以阻止它……这就是我所拥有的,linkedlist类只是具有insertfirst和insertlast的通用链表类。 `公共类应用{
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-...... etc
第30行发生错误
我更新了您的代码并对其进行了一些修改。 它可能会解决您的问题。 我曾经处理过类似的问题,但它在c ++上仍然可以与Java代码一起工作...让我知道它是否有效并解决了您的问题。
公共静态无效合并(int开头,int中间,int结束,sLinkedList列表){
sLinkedList tempList = new sLinkedList();
int left = start;
int right = mid+1;
int k = start;
while((left<=mid) && (right<=end))
{
if(list.get(left) < (list.get(right)) // compare your if the item on the left is less than the one on the right
{
tempList.insertLast(list.get(left));
left = left+1;
}
else {
tempList.insertLast(list.get(right));
right++;
}
k++;
}
for ( int i = left; i <= mid; i++ )
{
tempList.insertLast(list.get(i));
k++; //moves remaining right list value to temp list
}
for ( int i = right; i <= end; i++ )
{
tempList.insertLast(list.get(i));
k++; //moves sorted temp list back to original list
}
for ( int i = start; i <= end; i++ )
tempList.insertLast(list.get(i));
delete tempList;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.