标签:
/* * 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) { //mergesort 空间复杂度为1; if(head==null||head.next==null) return head; ListNode mid=findMid(head); ListNode left=head; ListNode right=mid.next; mid.next=null; left=sortList(left); right=sortList(right); head=merge(left,right); return head; } //若链表节点为奇数,则找到中间节点;若链表节点为偶数,则找到两个中间节点的前一个; public ListNode findMid(ListNode head) { ListNode prear=head; ListNode pfront=head; while(prear.next!=null&&prear.next.next!=null) { prear=prear.next.next; pfront=pfront.next; } return pfront; } public ListNode merge(ListNode left,ListNode right) { if(left==null) return right; if(right==null) return left; //相较数组,并没有辅助数组的赋值操作,空间复杂度为O(1); ListNode temp=new ListNode(0); ListNode p=temp; while(left!=null&&right!=null) { if(left.val<right.val) { p.next=left; p=p.next; left=left.next; }else { p.next=right; p=p.next; right=right.next; } } if(left!=null) { p.next=left; } if(right!=null) { p.next=right; } return temp.next; } }
标签:
原文地址:http://blog.csdn.net/jingsuwen1/article/details/51350953