算法系列——Sort List

来源:互联网 发布:淘宝网中老年女冬装 编辑:程序博客网 时间:2024/06/05 11:08

题目描述

Sort a linked list in O(n log n) time using constant space complexity.

解题思路

这道题要求我们对链表进行排序,采用分治法的策略,递归的对链表左右两块进行排序即可。其实就是归并排序的思路。
两个重要操作
1.快慢指针分割链表
2.合并操作操作。

程序实现

public class Solution {    public ListNode sortList(ListNode head) {        //边界        if(head==null||head.next==null)            return head;        //找到中间节点        ListNode slow=head;        ListNode fast=head;        while(fast.next!=null&&fast.next.next!=null){            slow=slow.next;            fast=fast.next.next;        }        fast=slow.next;        slow.next=null;        //递归调用        ListNode p1=sortList(head);        ListNode p2=sortList(fast);        return mergeList(p1,p2);      }    private ListNode mergeList(ListNode p1,ListNode p2){        if(p1==null)            return p2;        if(p2==null)            return p1;        ListNode dummyHead=new ListNode(-1);        ListNode p=dummyHead;        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;             }        if(p1!=null)            p.next=p1;        else if(p2!=null)            p.next=p2;        return dummyHead.next;    }   }
原创粉丝点击