Skip to content

Commit dd919ad

Browse files
authored
Create 148. Sort List
1 parent 97e09b6 commit dd919ad

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

Diff for: 148. Sort List

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
class Solution {
12+
public:
13+
ListNode* getMid(ListNode* head)
14+
{
15+
ListNode* slow = head;
16+
ListNode* fast = head -> next;
17+
18+
while(fast != NULL && fast -> next != NULL)
19+
{
20+
fast = fast -> next -> next;
21+
slow = slow -> next;
22+
}
23+
24+
return slow;
25+
}
26+
27+
ListNode* merge(ListNode* left, ListNode* right)
28+
{
29+
if(left == NULL)
30+
return right;
31+
if(right == NULL)
32+
return left;
33+
ListNode* ans = new ListNode(-1);
34+
ListNode* temp = ans;
35+
36+
while(left != NULL && right != NULL)
37+
{
38+
if(right -> val < left -> val)
39+
{
40+
temp -> next = right;
41+
temp = right;
42+
right = right ->next;
43+
}
44+
else
45+
{
46+
temp -> next = left;
47+
temp = left;
48+
left = left -> next;
49+
}
50+
}
51+
52+
while(left != NULL)
53+
{
54+
temp -> next = left;
55+
temp = left;
56+
left = left -> next;
57+
}
58+
while(right != NULL)
59+
{
60+
temp -> next = right;
61+
temp = right;
62+
right = right ->next;
63+
}
64+
65+
return ans -> next;
66+
}
67+
68+
ListNode* sortList(ListNode* head) {
69+
// base case
70+
if(head == NULL || head -> next == NULL)
71+
return head;
72+
73+
//divide list into two halves
74+
ListNode* mid = getMid(head);
75+
76+
ListNode* left = head;
77+
ListNode* right = mid -> next;
78+
mid -> next = NULL;
79+
80+
//recursive calls for sort the both halves
81+
left = sortList(left);
82+
right = sortList(right);
83+
84+
//merge the halves
85+
ListNode* ans = merge(left, right);
86+
87+
return ans;
88+
}
89+
};

0 commit comments

Comments
 (0)