对链接列表进行排序会导致丢失LinkedList中间值,并在java中仅返回first和Last as sorted值

时间:2012-04-30 18:25:56

标签: java data-structures linked-list

我的LinkedList -

class MyList{
        int N;
        MyList next = null;
        MyList(int N){
            this.N = N;
        }

        @Override
        public String toString() {
            MyList curr = this;
            String output = "";
            while(curr != null){
                output = output+curr.N+"-->";
                curr = curr.next;
            }
            return output+"TAIL";
        }
    }

排序方法ALGO -

private static MyList sortLL(MyList L){
        int temp;
        if(L == null || L.next == null)
            return L;

        MyList current = L;
        MyList previous = null;

        while(current.next != null){
            if(current.N > current.next.N){
                temp = current.N;
                current.N = current.next.N;
                current.next.N = temp;
            }
            previous = current;
            current = current.next;
        }


        return previous;
    }

输入 -

MyList list_Sort = new MyList(9);
        list_Sort.next = new MyList(8);
        list_Sort.next.next = new MyList(8);
        list_Sort.next.next.next = new MyList(7);
        list_Sort.next.next.next.next = new MyList(5);
        list_Sort.next.next.next.next.next = new MyList(4);
        list_Sort.next.next.next.next.next.next = new MyList(6);
        list_Sort.next.next.next.next.next.next.next = new MyList(3);
        list_Sort.next.next.next.next.next.next.next.next = new MyList(1);
        list_Sort.next.next.next.next.next.next.next.next.next = new MyList(2);
  

输入 - 9 - > 8 - > 8 - > 7 - > 5 - > 4 - > 6 - > 3 - > 1 - > 2 - > TAIL

     

输出 - 2 - > 9 - > TAIL

     

预期输出 - 输入应按排序顺序

1 个答案:

答案 0 :(得分:1)

首先,您无法使用显示的算法对此进行排序。假设您正在使用bubblesort,排序是一个O(n ^ 2)操作。下一个问题是你的'上一个'被覆盖了。

您实际上不需要先前的逻辑。您没有交换正在交换列表值的列表的节点。您可以使用L.

导航列表,而不是返回之前的内容(完全删除它)

另一方面,假设您正在尝试学习新事物;我建议您学习如何使用调试器。