题解 | #单链表的排序#
单链表的排序
https://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08
using System; using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } } */ class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head node * @return ListNode类 */ public static ListNode Merge(ListNode head1, ListNode head2) { if (head1 == null) return head2; if (head2 == null) return head1; ListNode res = new ListNode(-1); ListNode tail = res; while (head1 != null && head2 != null) { if (head1.val < head2.val) { tail.next = head1; tail = head1; head1 = head1.next; } else { tail.next = head2; tail = head2; head2 = head2.next; } } tail.next = head1 == null ? head2 : head1; return res.next; } public ListNode sortInList(ListNode head) { // write code here if (head == null || head.next == null) return head; ListNode left = head; ListNode mid = head.next; ListNode right = head.next.next; while (right != null && right.next != null) { left = left.next; mid = mid.next; right = right.next.next; } left.next = null; return Merge(sortInList(head), sortInList(mid)); } }