排序没有明显访问节点的LinkedList



大家好。我希望有人能解释一下。我有一个家庭作业问题,要求我对给定的LinkedList进行排序,并返回排序后的列表,如下所示:

private LinkedList<T> list;
// constructor
public SortedLinkedList(LinkedList<T> in){
}      

现在,我认为我已经得到了逻辑(我可以使用一个简单的归并排序),但是我看不到访问节点本身的方法。我想到的是快速排序的一个小变化,即使用头部作为枢轴,将链表分成两个较小的,重复,然后合并…但我想知道我是否可以用其他方法来做。由于我们无法真正访问任何私有节点,因此我没有任何好主意。

由于显而易见的原因,不允许使用Collections或Arrays对其进行排序。我们只允许使用Java LinkedList和单个私有字段。

谢谢你的建议。

编辑:我宁愿避免使用toArray,如果我可以帮助它。

由于不允许使用其他类,我建议您使用冒泡排序。它更容易,性能也不差。下面是它的用法:

public SortedLinkedList(LinkedList<T> in) {
    bubbleSort(in);
}
private void bubbleSort(LinkedList<T> in) {
    // Convert the LinkedList into an array called arr. You should know how to do this..
    // This code assumes that your resulting array is of type int. For others, adjust
    // the code appropriately.
    for(int i = arr.length - 1; i > 0; i--) {
        for(int j = 0; j < i; j++) {
            if(arr[j] > arr[j + 1])
                swap(array, j, j+1);
        }
    }
}
private void swap(int[] array, int i, int j) {
    int temp = 0;
    temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

你不需要任何私有访问。威胁列表只是列表-你有get和set方法。

非常重要的是要考虑到链表在随机访问中很慢!所以你需要找到一种排序方法它能处理相邻的节点。

在这种情况下,冒泡排序之类的东西实际上可能是最好的。不是泡沫。名称不同,您需要cmp并交换相邻的单元格。也许是交换排序?

相关内容

  • 没有找到相关文章

最新更新