题目链接
LeetCode 148. 排序链表
解题思路
这道题应该是基础的简单排序。主要思路是:
- 使用归并排序来对链表进行排序。
- 归并排序的时间复杂度为 O(n log n),适合链表的排序。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
var sortList = function(head) { if (!head || !head.next) { return head; }
let slow = head; let fast = head; let prev = null;
while (fast && fast.next) { prev = slow; slow = slow.next; fast = fast.next.next; }
prev.next = null;
let left = sortList(head); let right = sortList(slow);
return merge(left, right); };
function merge(l1, l2) { let dummy = new ListNode(0); let current = dummy;
while (l1 && l2) { if (l1.val < l2.val) { current.next = l1; l1 = l1.next; } else { current.next = l2; l2 = l2.next; } current = current.next; }
current.next = l1 ? l1 : l2;
return dummy.next; }
|
总结
通过归并排序,我们可以有效地对链表进行排序,且时间复杂度为 O(n log n)。