单链表的归并排序

来源:互联网 发布:java web和前端开发 编辑:程序博客网 时间:2024/05/21 04:18

题目描述

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

算法:

/** * Definition for singly-linked list. * class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode sortList(ListNode head) {        if(head==null||head.next==null)return head;        ListNode fast=head.next,slow=head,mid;        while(fast!=null&&fast.next!=null){            fast=fast.next.next;            slow=slow.next;        }        mid=slow.next;        slow.next=null;        ListNode left=sortList(head);        ListNode right=sortList(mid);        head=merge(left,right);        return head;    }    static ListNode merge(ListNode left,ListNode right){        ListNode dummy=new ListNode(0);        ListNode p=dummy;        while(left!=null&&right!=null){            if(left.val<right.val){                p.next=left;                left=left.next;            }            else{                p.next=right;                right=right.next;            }            p=p.next;        }        if(left!=null){            p.next=left;        }        if(right!=null){            p.next=right;        }        return dummy.next;    }}
0 0
原创粉丝点击