【leetcode】148.(Medium)Sort List

解题思路:

这道题是要我们用O(n log n) 的时间复杂度来对一个链表进行排序
O(n log n) 复杂度的排序算法就是归并排序了
这里对链表的排序用到了归并排序的思想


提交代码:

class Solution {
    public ListNode sortList(ListNode head) {
        if(head==null||head.next==null)	return head;
        
        // divide the list into 2
        ListNode pre=null,slow=head,fast=head;
        while(fast!=null&&fast.next!=null) {
        	pre=slow;
        	slow=slow.next;
        	fast=fast.next.next;
        }
        pre.next=null;
        head=sortList(head);
        slow=sortList(slow);
        return mergeSort(head,slow);
    }
    
    public ListNode mergeSort(ListNode head1,ListNode head2) {
    	ListNode dummy=new ListNode(-1);
    	ListNode p=dummy,p1=head1,p2=head2;
    	while(p1!=null&&p2!=null) {
    		if(p1.val<p2.val) {
    			p.next=p1;
    			p1=p1.next;
    		}else {
    			p.next=p2;
    			p2=p2.next;
    		}p=p.next;
    	}
    	while(p1!=null) {
    		p.next=p1;
			p1=p1.next;
			p=p.next;
    	}
    	while(p2!=null) {
    		p.next=p2;
			p2=p2.next;
			p=p.next;
    	}
    	return dummy.next;
    }
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/86563932