#include<iostream>
#include<cstdlib>
using namespace std;
struct node
{
int info;
struct node *next;
};
void push(struct node **manage,int ele)
{
struct node *temp=(struct node *)malloc(sizeof(struct node));
temp->info=ele;
temp->next=*manage;
*manage=temp;
}
void display(struct node *manage)
{
if(manage==nullptr)
cout<<"\n\n Linked list is empty!!!";
else
{
cout<<"\n\n";
while(manage!=nullptr)
{
cout<<' '<<manage->info;
manage=manage->next;
}
}
}
void backfrontsplit(struct node *List,struct node **fron_t,struct node **bac_k)
{
struct node *slow_p=List,*fast_p=List->next;
while(fast_p&&fast_p->next)
{
slow_p=slow_p->next;
fast_p=fast_p->next->next;
}
*bac_k=slow_p->next;
*fron_t=List;
slow_p->next=nullptr;
}
struct node * Merge_Linked_list_recursive(struct node *fron_t,struct node *bac_k)
{
struct node *temp;
if(fron_t==nullptr&&bac_k==nullptr)
return(nullptr);
else if(fron_t!=nullptr&&(bac_k?fron_t->info<=bac_k->info:1))
{
temp=(struct node *)malloc(sizeof(struct node));
temp->info=fron_t->info;
temp->next=Merge_Linked_list_recursive(fron_t->next,bac_k);
}
else if(bac_k!=nullptr&&(fron_t?fron_t->info>bac_k->info:1))
{
temp=(struct node *)malloc(sizeof(struct node));
temp->info=bac_k->info;
temp->next=Merge_Linked_list_recursive(fron_t,bac_k->next);
}
return(temp);
}
void Merge_sort(struct node **manage)
{
struct node *f,*b;
struct node *head=*manage;
if(head==nullptr||head->next==nullptr)
return;
backfrontsplit(head,&f,&b);
Merge_sort(&f);
Merge_sort(&b);
*manage=Merge_Linked_list_recursive(f,b);
}
int main()
{
struct node *first=nullptr;
push(&first,5);
push(&first,6);
push(&first,7);
push(&first,8);
push(&first,9);
push(&first,10);
display(first);
Merge_sort(&first);
cout<<"\n\n";
display(first);
return(0);
}
CgogICAgICAgI2luY2x1ZGU8aW9zdHJlYW0+CiAgICAgICAjaW5jbHVkZTxjc3RkbGliPgoKCiAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCiAgICAgICBzdHJ1Y3Qgbm9kZQogICAgICAgewogICAgICAgICAgIGludCBpbmZvOwogICAgICAgICAgIHN0cnVjdCBub2RlICpuZXh0OwogICAgICAgfTsKCgogICAgICAgdm9pZCBwdXNoKHN0cnVjdCBub2RlICoqbWFuYWdlLGludCBlbGUpCiAgICAgICB7CiAgICAgICAgICAgc3RydWN0IG5vZGUgKnRlbXA9KHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgICAgICAgIHRlbXAtPmluZm89ZWxlOwogICAgICAgICAgIHRlbXAtPm5leHQ9Km1hbmFnZTsKICAgICAgICAgICAqbWFuYWdlPXRlbXA7CiAgICAgICB9CgoKICAgICAgIHZvaWQgZGlzcGxheShzdHJ1Y3Qgbm9kZSAqbWFuYWdlKQogICAgICAgewogICAgICAgICAgaWYobWFuYWdlPT1udWxscHRyKQogICAgICAgICAgICAgY291dDw8IlxuXG4gTGlua2VkIGxpc3QgaXMgZW1wdHkhISEiOwogICAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICAgIGNvdXQ8PCJcblxuIjsKICAgICAgICAgICAgICB3aGlsZShtYW5hZ2UhPW51bGxwdHIpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb3V0PDwnICc8PG1hbmFnZS0+aW5mbzsKICAgICAgICAgICAgICAgICAgbWFuYWdlPW1hbmFnZS0+bmV4dDsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICAgdm9pZCBiYWNrZnJvbnRzcGxpdChzdHJ1Y3Qgbm9kZSAqTGlzdCxzdHJ1Y3Qgbm9kZSAqKmZyb25fdCxzdHJ1Y3Qgbm9kZSAqKmJhY19rKQogICAgICAgewoKICAgICAgICAgICAgIHN0cnVjdCBub2RlICpzbG93X3A9TGlzdCwqZmFzdF9wPUxpc3QtPm5leHQ7CiAgICAgICAgICAgICB3aGlsZShmYXN0X3AmJmZhc3RfcC0+bmV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzbG93X3A9c2xvd19wLT5uZXh0OwogICAgICAgICAgICAgICAgIGZhc3RfcD1mYXN0X3AtPm5leHQtPm5leHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqYmFjX2s9c2xvd19wLT5uZXh0OwogICAgICAgICAgICAgKmZyb25fdD1MaXN0OwogICAgICAgICAgICAgIHNsb3dfcC0+bmV4dD1udWxscHRyOwogICAgICAgfQoKICAgICAgIHN0cnVjdCBub2RlICogTWVyZ2VfTGlua2VkX2xpc3RfcmVjdXJzaXZlKHN0cnVjdCBub2RlICpmcm9uX3Qsc3RydWN0IG5vZGUgKmJhY19rKQogICAgICAgewoKICAgICAgICAgIHN0cnVjdCBub2RlICp0ZW1wOwoKICAgICAgICAgIGlmKGZyb25fdD09bnVsbHB0ciYmYmFjX2s9PW51bGxwdHIpCiAgICAgICAgICAgIHJldHVybihudWxscHRyKTsKICAgICAgICAgIGVsc2UgaWYoZnJvbl90IT1udWxscHRyJiYoYmFjX2s/ZnJvbl90LT5pbmZvPD1iYWNfay0+aW5mbzoxKSkKICAgICAgICAgIHsKICAgICAgICAgICAgICB0ZW1wPShzdHJ1Y3Qgbm9kZSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKICAgICAgICAgICAgICB0ZW1wLT5pbmZvPWZyb25fdC0+aW5mbzsKICAgICAgICAgICAgICB0ZW1wLT5uZXh0PU1lcmdlX0xpbmtlZF9saXN0X3JlY3Vyc2l2ZShmcm9uX3QtPm5leHQsYmFjX2spOwogICAgICAgICAgfQogICAgICAgICAgIGVsc2UgaWYoYmFjX2shPW51bGxwdHImJihmcm9uX3Q/ZnJvbl90LT5pbmZvPmJhY19rLT5pbmZvOjEpKQogICAgICAgICAgIHsKICAgICAgICAgICAgICB0ZW1wPShzdHJ1Y3Qgbm9kZSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKICAgICAgICAgICAgICB0ZW1wLT5pbmZvPWJhY19rLT5pbmZvOwogICAgICAgICAgICAgIHRlbXAtPm5leHQ9TWVyZ2VfTGlua2VkX2xpc3RfcmVjdXJzaXZlKGZyb25fdCxiYWNfay0+bmV4dCk7CiAgICAgICAgICAgfQogICAgICAgICAgIHJldHVybih0ZW1wKTsKICAgICAgIH0KCiAgICAgICB2b2lkIE1lcmdlX3NvcnQoc3RydWN0IG5vZGUgKiptYW5hZ2UpCiAgICAgICB7CiAgICAgICAgICBzdHJ1Y3Qgbm9kZSAqZiwqYjsKICAgICAgICAgIHN0cnVjdCBub2RlICpoZWFkPSptYW5hZ2U7CgogICAgICAgICAgaWYoaGVhZD09bnVsbHB0cnx8aGVhZC0+bmV4dD09bnVsbHB0cikKICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgIGJhY2tmcm9udHNwbGl0KGhlYWQsJmYsJmIpOwogICAgICAgICBNZXJnZV9zb3J0KCZmKTsKICAgICAgICAgTWVyZ2Vfc29ydCgmYik7CiAgICAgICAgICptYW5hZ2U9TWVyZ2VfTGlua2VkX2xpc3RfcmVjdXJzaXZlKGYsYik7CiAgICAgICB9CgoKCgogICAgICAgaW50IG1haW4oKQogICAgICAgewogICAgICAgICAgc3RydWN0IG5vZGUgKmZpcnN0PW51bGxwdHI7CiAgICAgICAgICBwdXNoKCZmaXJzdCw1KTsKICAgICAgICAgIHB1c2goJmZpcnN0LDYpOwogICAgICAgICAgcHVzaCgmZmlyc3QsNyk7CiAgICAgICAgICBwdXNoKCZmaXJzdCw4KTsKICAgICAgICAgIHB1c2goJmZpcnN0LDkpOwogICAgICAgICAgcHVzaCgmZmlyc3QsMTApOwogICAgICAgICAgZGlzcGxheShmaXJzdCk7CiAgICAgICAgICBNZXJnZV9zb3J0KCZmaXJzdCk7CiAgICAgICAgICBjb3V0PDwiXG5cbiI7CiAgICAgICAgICBkaXNwbGF5KGZpcnN0KTsKICAgICAgICAgIHJldHVybigwKTsKICAgICAgIH0K