获得;“子链接列表”;来自java';s LinkedList类(用于合并排序)
我试图在java的标准LinkedList上练习MergeSort算法。我是标准图书馆的新手 我遇到的问题是创建“子链接列表”,以从MergeSort获得最佳性能 我有一个工作代码,但不幸的是,它将LinkedList视为某个数组:获得;“子链接列表”;来自java';s LinkedList类(用于合并排序),java,linked-list,Java,Linked List,我试图在java的标准LinkedList上练习MergeSort算法。我是标准图书馆的新手 我遇到的问题是创建“子链接列表”,以从MergeSort获得最佳性能 我有一个工作代码,但不幸的是,它将LinkedList视为某个数组: public void mergeSort(LinkedList<Integer> lisst) { if (lisst.size() < 2){ return; } int middleindex
public void mergeSort(LinkedList<Integer> lisst) {
if (lisst.size() < 2){
return;
}
int middleindex = lisst.size()/2;
LinkedList<Integer> LeftList = new LinkedList<Integer>();
for(int i = 0; i< middleindex; i++){
LeftList.addLast(lisst.get(i));
}
mergeSort(LeftList);
LinkedList<Integer> RightList = new LinkedList<Integer>();
for (int i = middleindex; i< lisst.size(); i++){
RightList.addLast(lisst.get(i));
}
mergeSort(RightList);
SortedMerge(RightList,LeftList,lisst);
}
但是在阅读库时,我不知道如何指向中间的元素并将其余元素用作子列表,而不循环将其添加到新的链接列表中
有没有一个简单的方法可以做到这一点?我没有看到什么吗
谢谢您。如果您只想要
链接列表的正确部分,您应该具备以下功能:
public static <T> LinkedList<T> removeUntil(LinkedList<T> list, int index) {
for (int i = 0; i < index; i++) {
list.removeFirst();
}
return list;
}
如果您希望保留链接列表的左侧部分
,则应保留以下内容:
public static <T> LinkedList<T>[] split(LinkedList<T> list, int index) {
LinkedList<T> left = new LinkedList<>();
for (int i = 0; i < index; i++) {
T t = list.removeFirst();
left.addLast(t);
}
return new LinkedList[] {
left, list
};
}
参考:
您应该弹出子链接列表左侧的所有节点。此外,您还应该使用。谢谢。这实际上帮助我以不同的方式看待它。
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(new Integer[] {1, 3, 5, 6, 9}));
System.out.format("Input : %s%n", list);
list = removeUntil(list, 3);
System.out.format("Output: %s%n", list);
}
Input : [1, 3, 5, 6, 9]
Output: [6, 9]
public static <T> LinkedList<T>[] split(LinkedList<T> list, int index) {
LinkedList<T> left = new LinkedList<>();
for (int i = 0; i < index; i++) {
T t = list.removeFirst();
left.addLast(t);
}
return new LinkedList[] {
left, list
};
}
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>(Arrays.asList(new Integer[] {1, 3, 5, 6, 9}));
System.out.format("Input : %s%n", list);
LinkedList[] alist = split(list, 3);
System.out.format("Output: %s, %s%n", alist[0], alist[1]);
}
Input : [1, 3, 5, 6, 9]
Output: [1, 3, 5], [6, 9]