148. Sort List

Sort a linked list in O(n log n) time using constant space complexity.

思想

归并排序 n O(logn)
快慢指针找到单链表的中点

代码

package linkList;

/**
 * Sort a linked list in O(n log n) time using constant space complexity.
 * Created by liqiushi on 2018/1/9.
 */
public class SortList {
    public ListNode sortList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        //使用快慢指针分割
        ListNode slow = head;
        ListNode fast = head;
        ListNode prev = null;
        while (fast != null && fast.next != null) {
            prev = slow;
            slow = slow.next;
            fast = fast.next.next;
        }
        //链表截断  head->prev->null、slow->fast->null/slow-null
        prev.next = null;
        ListNode l1 = sortList(head);
        ListNode l2 = sortList(slow);
        return merge(l1, l2);
    }

    public ListNode merge(ListNode l1, ListNode l2) {
        ListNode result = new ListNode(0);
        ListNode rptr = result;
        ListNode pptr = l1;
        ListNode qptr = l2;
        //遍历l1、l2
        while (pptr != null && qptr != null) {
            if (pptr.val <= qptr.val) {
                rptr.next = pptr;
                pptr = pptr.next;
            } else {
                rptr.next = qptr;
                qptr = qptr.next;
            }
            rptr = rptr.next;
        }
        if (pptr != null) {
            rptr.next = pptr;
        } else {
            rptr.next = qptr;
        }
        //若其中一个队列遍历完毕
        return result.next;
    }
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Sort a linked list in O(n log n) time using constant spac...
    matrxyz阅读 1,324评论 0 0
  • LeetCode 148 Sort List Sort a linked list in O(n log n) t...
    ShuiLocked阅读 3,991评论 0 0
  • Sort a linked list in O(n log n) time using constant spac...
    ShutLove阅读 1,805评论 0 0
  • Description Sort a linked list in O(n log n) time using c...
    Nancyberry阅读 1,720评论 0 0
  • 这是一个不一样的六一。 我俩在五月底吵了架,你对我说如果我俩能过去,我俩就扯证吧。听到这句话,一瞬间觉得还有什么气...
    小可爱多阅读 1,211评论 0 0

友情链接更多精彩内容