获得;“子链接列表”;来自java';s 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

我试图在java的标准LinkedList上练习MergeSort算法。我是标准图书馆的新手

我遇到的问题是创建“子链接列表”,以从MergeSort获得最佳性能

我有一个工作代码,但不幸的是,它将LinkedList视为某个数组:

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]