-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path148.sort-list.java
More file actions
127 lines (107 loc) · 2.05 KB
/
Copy path148.sort-list.java
File metadata and controls
127 lines (107 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
// @lc code=start
class Solution {
public ListNode sortList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode mid = findMid(head);
ListNode rightHead = mid.next;
mid.next = null; // split
ListNode left = sortList(head);
ListNode right = sortList(rightHead);
return marge(left, right);
}
private ListNode findMid(ListNode head) {
ListNode slow = head;
ListNode fast = head.next;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
private ListNode marge(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
curr.next = l1;
l1 = l1.next;
} else {
curr.next = l2;
l2 = l2.next;
}
curr = curr.next;
}
curr.next = l1 != null ? l1 : l2;
return dummy.next;
}
}
// @lc code=end
/**
*
* 148. Sort List
*
* Given the head of a linked list, return the list after sorting it in
* ascending order.
*
*
* Example 1:
*
* Input: head = [4,2,1,3]
* Output: [1,2,3,4]
*
*
*
*
* Example 2:
*
* Input: head = [-1,5,3,4,0]
* Output: [-1,0,3,4,5]
*
*/
/**
* Array-based sorting
*
* class Solution {
* public ListNode sortList(ListNode head) {
* List<Integer> arrList = new ArrayList<>();
*
* while (head != null) {
* arrList.add(head.val);
*
* head = head.next;
* }
*
* Collections.sort(arrList);
*
* ListNode dummy = new ListNode(0);
* ListNode curr = dummy;
*
* for (Integer num : arrList) {
* ListNode node = new ListNode(num);
*
* curr.next = node;
* curr = curr.next;
* }
*
* return dummy.next;
* }
* }
*/