1. 程式人生 > >力扣——排序鏈表

力扣——排序鏈表

linked pan 排序 lis listnode style 時間 bsp turn

O(n log n) 時間復雜度和常數級空間復雜度下,對鏈表進行排序。

示例 1:

輸入: 4->2->1->3
輸出: 1->2->3->4

示例 2:

輸入: -1->5->3->4->0
輸出: -1->0->3->4->5

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 
*/ class Solution { public ListNode sortList(ListNode head) { if(head == null || head.next == null) return head; ListNode fast = head, slow = head, pre = slow; while(fast != null && fast.next != null) { pre = slow; slow = slow.next; fast
= fast.next.next; } pre.next = null; ListNode l = sortList(head); ListNode r = sortList(slow); return merge(l, r); } private ListNode merge(ListNode l, ListNode r) { ListNode q = new ListNode(0), p = q;
while(l != null && r != null) { if(l.val < r.val) { p.next = l; l = l.next; } else { p.next = r; r = r.next; } p = p.next; } if(l != null) p.next = l; if(r != null) p.next = r; return q.next; } }

力扣——排序鏈表