Posted on by Kalkicode
Code Circular Linked List

Sorted insert for circular linked list

The Sorted Insert for Circular Linked List problem involves inserting a new node into a circular linked list while maintaining the sorted order of the list. A circular linked list is a data structure where the last node points back to the first node, creating a loop. The task is to insert a new node with a given value into the list in such a way that the sorted order of the list is preserved.

Problem Statement

Given a circular linked list in sorted order and a value to insert, the problem is to insert a new node with the given value into the circular linked list while keeping the list sorted.

Example

Consider a scenario where the initial circular linked list is: -3 -> 5 -> 8 -> 14 -> 17 -> 25 -> 26 -> 34 -> 62. Now, if we want to insert the value 20 into the list, the updated circular linked list should be: -3 -> 5 -> 8 -> 14 -> 17 -> 20 -> 25 -> 26 -> 34 -> 62.

Idea to Solve the Problem

To solve the problem of inserting a new node in sorted order in a circular linked list, follow these steps:

  1. If the linked list is empty, create a new node and make it the head and tail of the list. Point the node's next to itself.
  2. If the new value is smaller than the value of the current head node, insert the new node at the beginning and adjust pointers accordingly.
  3. If the new value is larger than the value of the current tail node, insert the new node at the end and adjust pointers accordingly.
  4. For other cases, iterate through the linked list until a position is found where the new value is smaller than the next node's value. Insert the new node at that position and adjust pointers.

Pseudocode

function insert(value):
    node = createLinkNode(value)
    if head is null:
        head = node
        tail = node
        node.next = node
    else if head.data >= value:
        node.next = head
        head = node
        tail.next = node
    else if tail.data <= value:
        tail.next = node
        tail = node
        node.next = head
    else:
        temp = head
        while temp is not null and temp.next.data < value:
            temp = temp.next
        node.next = temp.next
        temp.next = node

Algorithm Explanation

  1. If the list is empty, create a new node and set it as both the head and tail. Point its next to itself.
  2. If the new value is smaller than the head value, insert the new node at the beginning and update pointers accordingly.
  3. If the new value is larger than the tail value, insert the new node at the end and update pointers.
  4. If the new value falls between other nodes, iterate through the list until the correct position is found and insert the new node there.

Code Solution

Time Complexity

The time complexity of the insertion operation in a circular linked list is O(n), where n is the number of nodes in the linked list. This is because, in the worst case, we may need to traverse the entire linked list to find the correct position for insertion.

Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment