【发布时间】:2014-10-07 12:04:39
【问题描述】:
我完全被难住了。我已经在解决方案的示例上查找了示例,并且没有像这样的结构。
目标是以从小到大的排序方式组合两个链表。
问题是它必须使用由已创建列表类的对象调用的方法来完成,该对象接受列表类的另一个对象的列表。
编辑:我假设由于方法签名的形式而无法使用递归。如果不是这样,请纠正我。
即。
list2.mergeSort(list1.getList()); // getList() is a method that returns the list of
// that object
签名看起来像
public List<Integer> mergeSort(List<Integer> otherList)
在组合列表 1 和另一个列表 2 后,您会将生成的合并列表存储在列表 1 中,并由 mergeSort() 方法返回。
如果另一种形式比我选择的列表形式更好,我应该补充一点,列表可以是一个数组或整数、ArrayList 或其他一些列表或数组形式。
可能的解决方案?
public List<Integer> mergeSort(List<Integer> otherList){
List<Integer> temp = new LinkedList<Integer>();
for(int x = 0; x<list.size(); x++){
if(list.get(x) < otherList.get(x))
temp.add(list.get(x));
else
temp.add(otherList.get(x));
}
list = temp;
return list;
}
【问题讨论】:
-
同时遍历两个列表;接下来将两个当前值中的较小者放入合并列表中,仅推进该迭代器。继续,直到两个列表都被完全迭代。
-
您的排序列表(合并前后)可能有重复元素吗?
-
是的。关键是如果你有 list 1 = [0, 12, 34, 2] 和 list 2 = [2, 32, 4, 66] 在调用 mergeSort 方法后你的 list 2 现在应该看起来像 list 2 = [0, 2 , 2, 4, 12, 32, 34. 66]
标签: java algorithm list sorting linked-list