- Given a sorted singly linked containing elements.
- Insert a new node to a single linked list such that linked list remains sorted.
- Iterate through the single linked list & find the appropriate place to insert a element.
- Linked list should remain sorted after insertion.
- Traverse the sorted singly linked list to insert new element using iterative (non recursive) algorithm.
Algorithm: insert element to a sorted singly linked list.
- Take backup of head node
- Suppose, we would like to insert a new node 4 in a linked list [shown in Fig 1]
- Start iterating the linked list from head node
- Compare first node with new node [element 4]
- 1 < 4 ? Its true, take the back of node 1.
- Compare second node with new node [element 4]
- 3 < 4 ? Its true, take the back of node 3.
- Compare third node with new node [element 4]
- 5 < 4 ? Its false, node should be inserted node 5
- Insert a node 4 before Node 5
- Rearrange the references, so that 4 inserted in linked list
- 5 < 4 ? Its false, node should be inserted node 5
- return the head node of linked list
- We have shown the above algorithm in Fig 2.
- Time complexity of algorithm is O (n).
- Compare first node with new node [element 4]
Similarly, we can apply above algorithm to insert new element 7 in a linked list. We have shown it in Fig 3.
- print function will print the linked list.
- insert function will insert a new node to a sorted linked list.
Program: insert node/ element to a sorted singly linked list in java
1.) InsertInSortedList class:
- InserInSortedList class is responsible for inserting new node to single linked list.
- We will traverse the single linked and find out the appropriate place, to insert new node in a linked list.
package org.learn.Question;
public class InsertInSortedList {
public static Node insert(Node head, Node newNode) {
// first node to be inserted
if (null == head) {
return newNode;
}
Node prev = null;
Node iter = head;
while (iter != null && iter.data < newNode.data) {
// take backup of prev node
// used in appending the new node
prev = iter;
iter = iter.next;
}
newNode.next = prev.next;
prev.next = newNode;
return head;
}
public static void prepareList(Node head, int data) {
while (head.next != null)
head = head.next;
head.next = new Node(data);
}
public static void print(Node head) {
while (head != null) {
System.out.printf("%d ", head.data);
head = head.next;
}
System.out.println("");
}
}
2.) SingleLinkedListClient Class:
We are performing following operation in SingleLinkedListClient class
- We are creating the singlelinked list as shown in Fig 1.
- InsertInSortedList.insert method will insert a new node to sorted single linked list
- We are printing the final single linked list.
package org.learn.Client;
import org.learn.Question.InsertInSortedList;
import org.learn.Question.Node;
public class SingleLinkedListClient {
public static void main(String[] args) {
int[] listData = { 1, 3, 5, 9 };
Node head = new Node(listData[0]);
for (int count = 1; count < listData.length; count++) {
InsertInSortedList.prepareList(head, listData[count]);
}
System.out.printf("1. Single linked list is : ");
InsertInSortedList.print(head);
int newData = 4;
Node newNode = new Node(newData);
head = InsertInSortedList.insert(head, newNode);
System.out.printf("2. Single linked list after inserting %d is : ", newData);
InsertInSortedList.print(head);
newData = 7;
newNode = new Node(newData);
head = InsertInSortedList.insert(head, newNode);
System.out.printf("3. Single linked list after inserting %d is : ", newData);
InsertInSortedList.print(head);
}
}
3.) Node Class:
- Node class representing the node(s) of single linked list
package org.learn.Question;
public class Node {
public int data;
public Node next;
public Node(int num) {
this.data = num;
this.next = null;
}
} Output: insert a node/element to a sorted singly linked list in java
1. Single linked list is : 1 3 5 9 2. Single linked list after inserting 4 is : 1 3 4 5 9 3. Single linked list after inserting 7 is : 1 3 4 5 7 9