對鏈表排序

package com.snnu;

import java.util.Random;

/**
 * Created by torch on 2017-06-03.
 */
class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
        next = null;
    }
}

public class SortList {

    public static void main(String[] args) {
        ListNode root = new ListNode(1);
        int len = 5;
        Random random = new Random();
        ListNode traverse = root;
        for (int i = 0; i < len; i++) {
            int val = random.nextInt(100);
            System.out.print(val + " ");
            traverse.next = new ListNode(val);
            traverse = traverse.next;
        }
        System.out.println();

        root.next = new SortList().insertionSortList(root.next);
        print(root);
    }

//    private static void print(ListNode root) {
//        while (root.next != null){
//            System.out.print(root.next.val + " ");
//            root = root.next;
//        }
//        System.out.println();
//    }

    public ListNode insertionSortList(ListNode head) {
        if(head == null) return null;
        ListNode firstNode = new ListNode(Integer.MIN_VALUE);
        ListNode beforeHead = new ListNode(-1);
        beforeHead.next = head;
        ListNode traverseUnsortedList;
        ListNode i = head;
        do{
            ListNode last = firstNode;
            ListNode traverseSortedList = firstNode.next;
            traverseUnsortedList = i;
            boolean insertIntoMiddle = false;
            while (traverseSortedList!= null){
                if(traverseUnsortedList.val <= traverseSortedList.val){
                    last.next = traverseUnsortedList;
                    i = traverseUnsortedList.next;
                    traverseUnsortedList.next = traverseSortedList;
                    insertIntoMiddle = true;
                    break;
                }else {
                    last = traverseSortedList;
                    traverseSortedList = traverseSortedList.next;
                }
            }
            if(!insertIntoMiddle){
                last.next = traverseUnsortedList;
                i = traverseUnsortedList.next;
                traverseUnsortedList.next = null;
            }

        }while (i != null);
        return firstNode.next;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章