题解 | #单链表的排序#
单链表的排序
https://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08
/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类 the head node
* @return ListNode类
*/
function sortInList( head ) {
// write code here
if (head.next === null) {
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 = sortInList(head)
let right = sortInList(slow)
return mergeNode(left,right)
}
function mergeNode( head1 , head2 ) {
let p = new ListNode(0)
let p1 = p
while (head1 && head2) {
if(head1.val <= head2.val) {
p.next = head1
head1 = head1.next
}
else {
p.next = head2
head2 = head2.next
}
p = p.next
}
if (head1) {
p.next = head1
}
if (head2) {
p.next = head2
}
return p1.next
}
module.exports = {
sortInList : sortInList
};
