LeetCode 148 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode sortList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode slow = head;
ListNode fast = head.next;
while(fast!=null&&fast.next!=null){//快慢指针,慢指针找中点,快指针找边界
slow = slow.next;
fast = fast.next.next;
}
ListNode rightHead = slow.next;
slow.next=null;
ListNode left = sortList(head);
ListNode right = sortList(rightHead);
ListNode h =new ListNode(-1);//用来寻找头
ListNode res =new ListNode();
res=h;
while(left!=null&&right!=null){
if(left.val<right.val){
h.next=left;
left=left.next;
}else{
h.next = right;
right = right.next;
}
h=h.next;
}
h.next= left!=null?left:right;//因为已经有序,所以这里直接街上即可
return res.next;
}
}