11/*
22148. Sort List
33
4- Submitted: February 10 , 2025
4+ Submitted: February 11 , 2025
55
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 %)
88*/
99
1010/* *
@@ -17,14 +17,43 @@ Memory: 58.09 MB (beats 75.27%)
1717 * ListNode(int x, ListNode *next) : val(x), next(next) {}
1818 * };
1919 */
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