java如何实现排序链表
更新:HHH   时间:2023-1-7


这篇文章将为大家详细讲解有关java如何实现排序链表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。

示例 1:

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

示例 2:

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

答案:

 1public ListNode sortList(ListNode head) {
2    if (head == null || head.next == null)
3        return head;
4    // 把链表分为两部分
5    ListNode prev = null, slow = head, fast = head;
6    while (fast != null && fast.next != null) {
7        prev = slow;
8        slow = slow.next;
9        fast = fast.next.next;
10    }
11    prev.next = null;
12    // 分别排序这两部分
13    ListNode l1 = sortList(head);
14    ListNode l2 = sortList(slow);
15    // 然后再合并
16    return merge(l1, l2);
17}
18
19ListNode merge(ListNode l1, ListNode l2) {
20    ListNode l = new ListNode(0), p = l;
21    while (l1 != null && l2 != null) {
22        if (l1.val < l2.val) {
23            p.next = l1;
24            l1 = l1.next;
25        } else {
26            p.next = l2;
27            l2 = l2.next;
28        }
29        p = p.next;
30    }
31    if (l1 != null)
32        p.next = l1;
33    if (l2 != null)
34        p.next = l2;
35    return l.next;
36}

关于“java如何实现排序链表”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

返回大数据教程...