Sorted insert for circular linked list
Given a sorted circular linked list, the task is to insert a new node in this circular list so that it remains a sorted circular linked list.
Example 1:
Input:
LinkedList = 1->2->4
(the first and last node is connected,
i.e. 4 --> 1)
data = 2
Output: 1 2 2 4
Example 2:
Input:
LinkedList = 1->4->7->9
(the first and last node is connected,
i.e. 9 --> 1)
data = 5
Output: 1 4 5 7 9
1. There will be 3 cases in this question:
Case 1: head_ref is NULL
In this case, create a node with data x and store its address at head_ref.
Case 2: data of head node is greater than new node's data
In this case as well, new node will become head of list and previous head will be second node.
Case 3: if none of the prev is true
Locate a node whose data is greater than new data and insert new node right before it. In case no such node is found in the list, append new node at the end.
c++ implementation:
Node *sortedInsert(struct Node *head, int data)
{
struct Node* current = head;
struct Node* new_Node = new Node(data);
// Case 1 of the above algo
if (current == NULL)
{
head=new_Node;
return head;
}
// Case 2 of the above algo
else if (current->data >= new_Node->data)
{
/* If value is smaller than head's value then
we need to change next of last Node */
while(current->next != head)
current = current->next;
current->next = new_Node;
new_Node->next = head;
return new_Node;
}
// Case 3 of the above algo
else
{
/* Locate the Node before the point of insertion */
while (current->next!= head &&
current->next->data < new_Node->data)
current = current->next;
new_Node->next = current->next;
current->next = new_Node;
return head;
}
}
No comments