题目描述
给你链表的头结点 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, fast = head;
//快慢指针找中点
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;