diff --git a/LeetCode/src/main/java/com/code/leet/study/LinkNode/t20210210/SortList.java b/LeetCode/src/main/java/com/code/leet/study/LinkNode/t20210210/SortList.java new file mode 100644 index 0000000..d4a526e --- /dev/null +++ b/LeetCode/src/main/java/com/code/leet/study/LinkNode/t20210210/SortList.java @@ -0,0 +1,69 @@ +package com.code.leet.study.LinkNode.t20210210; + +import com.code.leet.entiy.ListNode; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 + *

+ * 进阶: + *

+ * 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? + *   + *

+ * 示例 1: + *

+ *

+ * 输入:head = [4,2,1,3] + * 输出:[1,2,3,4] + * 示例 2: + *

+ *

+ * 输入:head = [-1,5,3,4,0] + * 输出:[-1,0,3,4,5] + * 示例 3: + *

+ * 输入:head = [] + * 输出:[] + *   + *

+ * 提示: + *

+ * 链表中节点的数目在范围 [0, 5 * 104] 内 + * -105 <= Node.val <= 105 + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/sort-list + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ +public class SortList { + /** + * 148. 排序链表 + * @param head + * @return + */ + public ListNode sortList(ListNode head) { + List list = new ArrayList<>(); + while (head != null) { + list.add(head); + head = head.next; + } + Collections.sort(list, (n1, n2) -> n1.val - n2.val); + int size = list.size(); + if (size == 0) { + return null; + } + head = list.get(0); + ListNode temp = head; + for (int i = 1; i < size; i++) { + temp.next = list.get(i); + temp.next.next = null; + temp = temp.next; + } + + return head; + } +}