0

我的链表 -

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";
        }
    }

排序方法算法-

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

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

4

1 回答 1

1

首先,您无法使用显示的算法对其进行排序。假设您使用的是冒泡排序,排序是 O(n^2) 操作。下一个问题是你的“以前的”被覆盖了。

实际上,您的逻辑中不需要先前的。您不是在交换列表的节点,而是在交换列表的值。您可以使用 L 导航列表,而不是返回以前的(完全删除它)。

附带说明一下,假设您正在尝试学习新事物;我建议您学习如何使用调试器。

于 2012-04-30T18:36:37.250 回答