LeetCode 148:Sort List
Posted 一只菜鸡的奋斗史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 148:Sort List相关的知识,希望对你有一定的参考价值。
题意描述
对一个链表进行排序
测试用例
Input: 4->2->1->3
Output: 1->2->3->4
Input: -1->5->3->4->0
Output: -1->0->3->4->5
解题思路
一、思路一
- 将链表进行拆分,最终向下拆分成一个节点为单位的链表
- 比较节点的val大小,重新进行拼接
- 每次拼接完成,返回新链表的头节点,进行下一轮拼接
public ListNode sortList(ListNode head) {
if(head == null || head.next == null) return head;
ListNode slow = head,fast = head,pre = null;
//将链表分为两部分
while(fast != null && fast.next != null){
pre = slow;
slow = slow.next;
fast = fast.next.next;
}
pre.next = null;
ListNode l1 = sortList(head); //左边向下拆分
ListNode l2 = sortList(slow); //右边向下拆分
return merge(l1, l2); //拼接节点
}
private ListNode merge(ListNode node1,ListNode node2){
ListNode node = new ListNode(-1);
ListNode head = node;
while(node1 != null && node2 != null){
if(node1.val < node2.val){
head.next = node1;
node1 = node1.next;
}else{
head.next = node2;
node2 = node2.next;
}
head = head.next;
}
if(node1 != null){
head.next = node1;
}
if(node2 != null){
head.next = node2;
}
return node.next;
}
以上是关于LeetCode 148:Sort List的主要内容,如果未能解决你的问题,请参考以下文章