Skip to content

Commit 945afc3

Browse files
Merge pull request #89 from sahilahmed24/main
Resolved Issue #49
2 parents c09e4fc + bf41196 commit 945afc3

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#include<bits/stdc++.h>
2+
using namespace std;
3+
4+
struct Node{
5+
int data;
6+
Node *next;
7+
};
8+
9+
void insert(int x,Node **head) {
10+
if(*head == NULL){
11+
*head = new Node;
12+
(*head)->data = x;
13+
(*head)->next = NULL;
14+
return;
15+
}
16+
Node *temp = new Node;
17+
temp->data = (*head)->data;
18+
temp->next = (*head)->next;
19+
(*head)->data=x;
20+
(*head)->next=temp;
21+
}
22+
23+
24+
void print(Node *head) {
25+
Node *temp=head;
26+
while(temp!=NULL) {
27+
cout<<temp->data<<" ";
28+
temp = temp->next;
29+
}
30+
}
31+
32+
Node *merge(Node *firstNode,Node *secondNode) {
33+
Node *merged = new Node;
34+
Node *temp = new Node;
35+
36+
37+
merged = temp;
38+
39+
40+
while(firstNode != NULL && secondNode != NULL) {
41+
42+
if(firstNode->data<=secondNode->data) {
43+
temp->next = firstNode;
44+
firstNode = firstNode->next;
45+
}
46+
47+
else {
48+
temp->next = secondNode;
49+
secondNode = secondNode->next;
50+
}
51+
temp = temp->next;
52+
}
53+
54+
while(firstNode!=NULL) {
55+
temp->next = firstNode;
56+
firstNode = firstNode->next;
57+
temp = temp->next;
58+
}
59+
60+
while(secondNode!=NULL) {
61+
temp->next = secondNode;
62+
secondNode = secondNode->next;
63+
temp = temp->next;
64+
}
65+
66+
return merged->next;
67+
}
68+
69+
70+
Node *middle(Node *head) {
71+
Node *slow = head;
72+
Node *fast = head->next;
73+
74+
while(slow->next != NULL && (fast!=NULL && fast->next!=NULL)) {
75+
slow = slow->next;
76+
fast = fast->next->next;
77+
}
78+
return slow;
79+
}
80+
81+
82+
Node *sort(Node *head){
83+
84+
if(head->next == NULL) {
85+
return head;
86+
}
87+
88+
Node *mid = new Node;
89+
Node *head2 = new Node;
90+
mid = middle(head);
91+
head2 = mid->next;
92+
mid->next = NULL;
93+
94+
Node *finalhead = merge(sort(head),sort(head2));
95+
return finalhead;
96+
}
97+
int main(void) {
98+
Node *head = NULL;
99+
100+
int n;
101+
cin>>n;
102+
103+
int arr[n];
104+
for(int i=0; i<n; i++){
105+
cin>>arr[i];
106+
}
107+
for(int i=0;i<n;i++) {
108+
insert(arr[i],&head);
109+
}
110+
print(sort(head));
111+
return 0;
112+
}

0 commit comments

Comments
 (0)