#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
Node* next;
int
data;
};
Node* create()
{
Node* new_node = (Node*)
malloc
(
sizeof
(Node));
new_node->next = NULL;
return
new_node;
}
Node* find_head(Node* random)
{
if
(random == NULL)
return
NULL;
Node *head, *var = random;
while
(!(var->data > var->next->data || var->next == random)) {
var = var->next;
}
return
var->next;
}
Node* sortedInsert(Node* head_ref, Node* new_node)
{
Node* current = head_ref;
if
(current == NULL) {
new_node->next = new_node;
head_ref = new_node;
}
else
if
(current->data >= new_node->data) {
while
(current->next != head_ref)
current = current->next;
current->next = new_node;
new_node->next = head_ref;
head_ref = new_node;
}
else
{
while
(current->next != head_ref
&& current->next->data < new_node->data) {
current = current->next;
}
new_node->next = current->next;
current->next = new_node;
}
return
head_ref;
}
void
printList(Node* start)
{
Node* temp;
if
(start != NULL) {
temp = start;
do
{
cout << temp->data <<
" "
;
temp = temp->next;
}
while
(temp != start);
}
}
int
main()
{
int
arr[] = { 12, 56, 2, 11, 1, 90 };
int
list_size, i;
Node* start = NULL;
Node* temp;
for
(i = 0; i < 6; i++) {
if
(start != NULL)
for
(
int
j = 0; j < (
rand
() % 10); j++)
start = start->next;
temp = create();
temp->data = arr[i];
start = sortedInsert(find_head(start), temp);
}
printList(find_head(start));
return
0;
}