易错点
//239-h149 方法1 自顶向下归并排序
public ListNode sortList(ListNode head) {
//递归种终止条件
if (head==null||head.next==null){
return head;
}
// 使用快慢指针法寻找中间节点
ListNode fast=head.next,low=head;
while (fast!=null&&fast.next!=null){
fast=fast.next.next;
low=low.next;
}
ListNode rightHead=low.next;
low.next=null;
//递归调用 归
ListNode left = sortList(head);
ListNode right = sortList(rightHead);
//并
ListNode newHead=new ListNode();
ListNode cur=newHead; // 当前链表尾节点
while (left!=null&&right!=null){
if (left.val<right.val){
cur.next=left;
left=left.next;
cur=cur.next;
cur.next=null;
}else {
cur.next=right;
right=right.next;
cur=cur.next;
cur.next=null;
}
}
cur.next=left!=null ? left : right;
return newHead.next;
}
太麻烦了,略