Sort List

来源:互联网 发布:淘宝 专利代写 编辑:程序博客网 时间:2024/05/07 14:04

掌握此归并排序list,对于快排,之后熟悉。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode sortList(ListNode head) {        //if (head == null) {        if (head == null || head.next == null) {            return head;        }        ListNode midNode = getMid(head);        ListNode rightNode = sortList(midNode.next);        midNode.next = null;        ListNode leftNode = sortList(head);                return merge(leftNode, rightNode);    }        private ListNode merge(ListNode leftNode, ListNode rightNode) {        // if (leftNode == rightNode) {        //     return leftNode;        // }        ListNode dummyNode = new ListNode(0);        ListNode tail = dummyNode;        while (leftNode != null && rightNode != null) {            if (leftNode.val < rightNode.val) {                tail.next = leftNode;                leftNode = leftNode.next;            } else {                tail.next = rightNode;                rightNode = rightNode.next;            }            tail = tail.next;        }        if (leftNode != null) {            tail.next = leftNode;        } else if (rightNode != null) {            tail.next = rightNode;        }        return dummyNode.next;    }        private ListNode getMid(ListNode head) {        ListNode fn = head.next, sn = head;        while (fn != null && fn.next != null) {            sn = sn.next;            fn = fn.next.next;        }        return sn;    }}





0 0
原创粉丝点击