-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
Linked_List_Insertion_sort.cpp
145 lines (106 loc) · 2.79 KB
/
Linked_List_Insertion_sort.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
Author: Nirmal Kumar Joshi
Sorting a Linked List using Insertion Sort in C++.
Example:
Consider a singly linked list
3-> 7-> 2-> 8-> 1-> 9-> 9-> 5-> 6-> NULL
After insertion sort, the resultant list should be
1-> 2-> 3-> 5-> 6-> 7-> 8-> 9-> 9-> NULL
*/
#include <bits/stdc++.h>
#include<iostream>
using namespace std;
struct node
{
int data;
node * next;
};
/*Function that inserts nodes in front of
Given Linked List*/
void InsFront(node **head,int data)
{
node *temp = new node;
temp->data = data;
temp->next = *head;
*head = temp;
}
/*Function that inserts nodes in sorted order*/
void sorted_insert(node **head, int n)
{
node *temp = new node;
temp->data = n;
if(*head == NULL||(*head)->data >= n)
{
temp->next = *head;
*head = temp;
}
else
{
node *prev = *head;
node *curr = prev->next;
while(curr != NULL)
{
if(prev->data < n && n < curr->data)
{
prev->next = temp;
temp->next = curr;
return;
}
prev = prev->next;
curr = curr->next;
}
prev->next = temp;
temp->next= curr;
}
}
/*Function to apply insertion sort on list*/
void ins_sort(node **head)
{
if(*head == NULL)
return;
node *sorted_list = NULL;
node *curr = *head;
while(curr != NULL)
{
sorted_insert(&sorted_list,curr->data);
curr = curr->next;
}
*head = sorted_list;
}
void printList(node *head)
{
while (head != NULL)
{
cout<<head->data<<"-> ";
head = head->next;
}
cout<<"NULL";
}
/* Driver program to test above functions*/
int main()
{
node* head = NULL;
InsFront(&head, 6);
InsFront(&head, 5);
InsFront(&head, 9);
InsFront(&head, 9);
InsFront(&head, 1);
InsFront(&head, 8);
InsFront(&head, 2);
InsFront(&head, 7);
InsFront(&head, 3);
cout<<"Linked list is:\n";
printList(head);
/*Calling Insertion sort function*/
ins_sort(&head);
cout<<"\nSorted Linked list is:\n";
printList(head);
return 0;
}
/*
Output:
Linked list is:
3-> 7-> 2-> 8-> 1-> 9-> 9-> 5-> 6-> NULL
Sorted Linked list is:
1-> 2-> 3-> 5-> 6-> 7-> 8-> 9-> 9-> NULL
*/