1
1
/*
2
2
148. Sort List
3
3
4
- Submitted: February 10 , 2025
4
+ Submitted: February 11 , 2025
5
5
6
- Runtime: 7 ms (beats 96.37 %)
7
- Memory: 58.09 MB (beats 75.27 %)
6
+ Runtime: 7 ms (beats 96.40 %)
7
+ Memory: 55.79 MB (beats 99.18 %)
8
8
*/
9
9
10
10
/* *
@@ -17,14 +17,43 @@ Memory: 58.09 MB (beats 75.27%)
17
17
* ListNode(int x, ListNode *next) : val(x), next(next) {}
18
18
* };
19
19
*/
20
- class Solution {
21
- public:
22
- ListNode* sortList (ListNode* head) {
23
- vector<int > v;
24
- for (ListNode* p = head; p != nullptr ; p = p->next ) v.push_back (p->val );
25
- sort (v.begin (), v.end ());
26
- auto it = v.cbegin ();
27
- for (ListNode* p = head; p != nullptr && it != v.cend (); p = p->next , ++it) p->val = *it;
28
- return head;
29
- }
30
- };
20
+
21
+ class Solution {
22
+ public:
23
+ ListNode* sortList (ListNode* head) {
24
+ if (head == nullptr || head->next == nullptr ) return head;
25
+ int size = 0 ;
26
+ for (ListNode* p = head; p != nullptr ; p = p->next ) ++size;
27
+ if (size == 2 ) {
28
+ if (head->val > head->next ->val ) swap (head->val , head->next ->val );
29
+ return head;
30
+ }
31
+ ListNode* beforeHalf = head;
32
+ for (int i = 0 ; i < (size / 2 ) - 1 ; ++i) beforeHalf = beforeHalf->next ;
33
+ ListNode* half = beforeHalf->next ;
34
+ beforeHalf->next = nullptr ;
35
+ ListNode* newHead = mergeTwoLists (sortList (head), sortList (half));
36
+ return newHead;
37
+ }
38
+ // from 21-merge-two-sorted-lists
39
+ ListNode* mergeTwoLists (ListNode* list1, ListNode* list2) {
40
+ if (list1 == nullptr ) return list2;
41
+ if (list2 == nullptr ) return list1;
42
+ ListNode* head = list1->val > list2->val ? list2 : list1;
43
+ if (head == list1) list1 = list1->next ;
44
+ else list2 = list2->next ;
45
+ ListNode* tail = head;
46
+ while (list1 != nullptr && list2 != nullptr ) {
47
+ if (list1->val > list2->val ) {
48
+ tail->next = list2;
49
+ list2 = list2->next ;
50
+ } else {
51
+ tail->next = list1;
52
+ list1 = list1->next ;
53
+ }
54
+ tail = tail->next ;
55
+ }
56
+ tail->next = list1 == nullptr ? list2 : list1;
57
+ return head;
58
+ }
59
+ };
0 commit comments