sort-list 1.0.0
Sort List
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <iostream>
2
3using namespace std;
4
8struct ListNode
9{
10 int val;
12 ListNode() : val(0), next(nullptr) {}
13 ListNode(int x) : val(x), next(nullptr) {}
14 ListNode(int x, ListNode *next) : val(x), next(next) {}
15};
16
18{
19 ListNode* ptr = head;
20 while (ptr != NULL)
21 {
22 cout << "value: " << ptr->val << endl;
23 ptr = ptr->next;
24 }
25 return;
26}
27
29{
30 ListNode* tmp = ptr->next;
31 if (tmp)
32 delete_list(tmp);
33 delete ptr;
34}
35
37{
38public:
39 ListNode* merge(ListNode* head_left, ListNode* head_right)
40 {
41 // base case
42 if (head_left == NULL)
43 return head_right;
44 else if (head_right == NULL)
45 return head_left;
46
47 // recursive
48 if (head_left->val < head_right->val)
49 {
50 head_left->next = merge(head_left->next, head_right);
51 return head_left;
52 }
53 else
54 {
55 head_right->next = merge(head_right->next, head_left);
56 return head_right;
57 }
58 }
59
61 {
62 if (!head)
63 return NULL;
64
65 // base case
66 if (head->next == NULL)
67 return head;
68
69 // recursive case
70 ListNode* middle = head; // slow
71 ListNode* middle_prev = head;
72 ListNode* right = head; // fast
73
74 while (right->next != NULL)
75 {
76 middle_prev = middle;
77 middle = middle->next;
78 if (right->next->next)
79 right = right->next->next;
80 else
81 right = right->next;
82 }
83 middle_prev->next = NULL;
84
85 ListNode* head_left = sortList(head);
86 ListNode* head_right = sortList(middle);
87 head_left = merge(head_left, head_right);
88 return head_left;
89 }
90};
91
92int main()
93{
94 ListNode* head = new ListNode(4, new ListNode(2, new ListNode(1, new ListNode(3, NULL))));
95 Solution sol;
96 head = sol.sortList(head);
97 print_list(head);
98 delete_list(head);
99 return 0;
100}
ListNode * sortList(ListNode *head)
Definition main.cpp:60
ListNode * merge(ListNode *head_left, ListNode *head_right)
Definition main.cpp:39
void print_list(ListNode *head)
Definition main.cpp:17
int main()
Definition main.cpp:92
void delete_list(ListNode *ptr)
Definition main.cpp:28
Definition for singly-linked list.
Definition main.cpp:9
int val
Definition main.cpp:10
ListNode(int x)
Definition main.cpp:13
ListNode()
Definition main.cpp:12
ListNode * next
Definition main.cpp:11
ListNode(int x, ListNode *next)
Definition main.cpp:14