【发布时间】:2012-10-30 00:35:49
【问题描述】:
我在尝试为链表构建排序算法时遇到堆栈溢出异常。在那里,我的排序无限期地卡在同一个支点上,我无法弄清楚为什么它没有达到基本情况。
//Intlist 是一个简单的单链表类,带有一个 int var ".item" 和一个 .next 指针
pivotS(Intlist thisList){
if (thisList == null || thisList.next == null){
return thisList;
} else{
int pivot = thisList.item;
Intlist lower = lowerThanPivot(pivot, thisList);
Intlist upper = greaterOrEqualPivot(pivot, thisList);
lower = pivotS(lower);
upper = pivotS(upper);
return appendLists(lower, upper);
}
}
这应该类似于构造中的合并排序,对吗?我的个人功能似乎工作正常。我只是设置了递归错误吗?
【问题讨论】:
-
返回类型在哪里。
-
你能发布 lowerThanPivot() 或 greaterOrEqualPivot() 吗?我认为这是迭代列表的问题(也许你通过不重置迭代器或其他东西来跳过元素),据我所知,迭代器是内置在实际的列表类中的,你从来没有提到.next 和 .item 以外的任何方法
-
这会找到 .item 严格低于枢轴的成员。 public static Intlist lowerThanPivot(int n, Intlist L){ if (L == null){ return L; } else if (L.item >= n){ return lowerThanPivot(n, L.next); } else{ return new Intlist(L.item, lowerThanPivot(n, L.next)); } }
-
我正在使用一个 lowerThanPivot 版本。 PivotS 是静态的并返回 Intlist。
标签: java sorting linked-list pivot