sort-list
1.0.0
Sort List
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1
#include <iostream>
2
3
using namespace
std;
4
8
struct
ListNode
9
{
10
int
val
;
11
ListNode
*
next
;
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
17
void
print_list
(
ListNode
* head)
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
28
void
delete_list
(
ListNode
* ptr)
29
{
30
ListNode
* tmp = ptr->
next
;
31
if
(tmp)
32
delete_list
(tmp);
33
delete
ptr;
34
}
35
36
class
Solution
37
{
38
public
:
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
60
ListNode
*
sortList
(
ListNode
* head)
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
92
int
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
}
Solution
Definition
main.cpp:37
Solution::sortList
ListNode * sortList(ListNode *head)
Definition
main.cpp:60
Solution::merge
ListNode * merge(ListNode *head_left, ListNode *head_right)
Definition
main.cpp:39
print_list
void print_list(ListNode *head)
Definition
main.cpp:17
main
int main()
Definition
main.cpp:92
delete_list
void delete_list(ListNode *ptr)
Definition
main.cpp:28
ListNode
Definition for singly-linked list.
Definition
main.cpp:9
ListNode::val
int val
Definition
main.cpp:10
ListNode::ListNode
ListNode(int x)
Definition
main.cpp:13
ListNode::ListNode
ListNode()
Definition
main.cpp:12
ListNode::next
ListNode * next
Definition
main.cpp:11
ListNode::ListNode
ListNode(int x, ListNode *next)
Definition
main.cpp:14
main.cpp
Generated by
1.9.8