描述 给定一个无序单链表,实现单链表的排序(按升序排序)。 示例1 输入: [1,3,2,4,5] 复制 返回值: {1,2,3,4,5}
最简单的方法,遍历链表写到List中,sort,再拼接 下面是用归并排序的解法:
public class 单链表排序 {
public class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
public ListNode sortInList (ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode slow=head;
ListNode faster=head.next;
while(faster!=null&&faster.next!=null){
slow=slow.next;
faster=faster.next.next;
}
ListNode mid=slow.next;
slow.next=null;
ListNode left=sortInList(head);
ListNode right=sortInList(mid);
ListNode tail=new ListNode(-1);
ListNode temp=tail;
while(left!=null&&right!=null){
if(left.val>=right.val){
temp.next=right;
right=right.next;
}else{temp.next=left;
left=left.next;
}
temp=temp.next;
}
if(temp!=null)
temp.next=(left!=null)?left:right;
return tail.next;
}
}
|