JAVA Program for Insertion at the Nth Position of a Doubly Linked List
Java Program for Insertion at the Nth Position
The Process of insertion in a doubly linked list is somewhat similar to the process of insertion in a Singly Linked List, the difference here is just that here we have a extra pointer (Previous) that needs to be directed to the address of the node lying before the node that is being Inserted.
Steps to be followed while Inserting a Node at a Specific location of a Doubly Linked List
- Check for the presence of Node in the List, if there exists some Nodes, Continue.
- Now, to insert a node at the Nth Position of the Doubly Linked List, we’ll have to store and redirect various links of the Linked List.
- First of all the address stored in the next pointer of the (n-1)th node of the List will now store the address of the New Node that is being inserted.
- Now the address stored in the Previous Pointer of the (n+1)th node of the Linked List will also be re-directed to the address of the New Node being inserted.
- Now, at last the Previous Pointer of the New Node will be directed towards the address of the node at (n-1)th position and the Next Pointer of the New Node will be directed towards the address of the node at (n+1)th position.
Algorithm to insert a node at the specific position in a doubly linked list
- Node node=new Node()
- node.data=data
- node.nextNode=null
- if(this.head==null)
- if(location!=0)
- return
- else
- this.head=node
- if(head!=null&&location==0)
- node.nextNode=this.head
- this.head=node
- return
- Node curr=this.head
- Node prev =Nnull
- while(i=0)
- tempNode=tempNode.nextNode
Java program to Insert a Node at the Specific Position in a Doubly Linked List
Method 1
Method 2
Method 1
Run
import java.lang.*; class DoublyLinkedList { Node head; // not using parameterized constructor would by default // force head instance to become null // Node head = null; // can also do this, but not required // Node Class class Node { int data; Node next, prev; Node(int x) // parameterized constructor { data = x; next = null; prev = null; } } public void insertBeginning(int data) { // Creating newNode memory & assigning data value Node freshNode = new Node(data); freshNode.next = head; freshNode.prev = null; // if DLL had already >=1 nodes if (head != null) head.prev = freshNode; // changing head to this head = freshNode; } public void insertEnd(int data) { // Creating newNode memory & assigning data value Node freshNode = new Node(data); // assign data // since this will be the last node its next will be NULL freshNode.next = null; //if we are entering the first node if (head == null) { head = freshNode; freshNode.prev = null; return; } Node last = head; // traverse to the current last node while (last.next != null) last = last.next; // assign current last node's next to this new node // assign new node's previous to this last node last.next = freshNode; freshNode.prev = last; // new_node becomes the last node now } public void insertAfterPosition(int n, int data) { int len = getLength(head); // if insertion position is 0 means entering at start if (n == 0) { insertBeginning(data); return; } // means inserting after last item if (n == len) { insertEnd(data); return; } // else insertion will happen somewhere in the middle if (n < 1 || len < n) System.out.println("Invalid position"); else { Node freshNode = new Node(data); // can remove null assignments also (constructor takes care of these) // added just for explanation purpose freshNode.next = null; freshNode.prev = null; // nthNode used to traverse the Linked List Node nthNode = head; // traverse till the nth node while (--n > 0) { nthNode = nthNode.next; } Node nextNode = nthNode.next; // (n+1)th node // assigning (n+1)th node's previous to this new node nextNode.prev = freshNode; // new_node's next assigned to (n+1)th node freshNode.next = nextNode; // new_node's previous assigned to nth node freshNode.prev = nthNode; // assign nth node's next to new_node nthNode.next = freshNode; } } public void printList() { Node node = head; Node end = null; //as linked list will end when Node reaches Null System.out.print("\nIn forward: "); while (node != null) { System.out.print(node.data + " "); end = node; node = node.next; } System.out.print("\nIn backward: "); while (end != null) { System.out.print(end.data + " "); end = end.prev; } System.out.println(); } // required for insertPosition() method public int getLength(Node node) { int size = 0; // traverse to the last node each time incrementing the size while (node != null) { node = node.next; size++; } return size; } } class Main{ public static void main(String args[]) { DoublyLinkedList doublylist = new DoublyLinkedList(); doublylist.insertBeginning(3); doublylist.insertBeginning(2); doublylist.insertBeginning(1); doublylist.insertBeginning(4); doublylist.insertBeginning(7); //Inserts after 4th position doublylist.insertAfterPosition(4,5); doublylist.printList(); } }
Output
In forward: 7 4 1 2 5 3 In backward: 3 5 2 1 4 7
Method 2
Run
import java.lang.*; // Node Class class Node { int data; Node next, prev; Node(int x) // parameterized constructor { data = x; next = null; prev = null; } } class Main { static Node insertBeginning(Node head, int data) { // Creating newNode memory & assigning data value Node newNode = new Node(data); newNode.next = head; newNode.prev = null; // if DLL had already >=1 nodes if(head !=null) head.prev = newNode; // changing head to this head = newNode; return head; } static Node insertEnd(Node head, int data) { // Creating newNode memory & assigning data value Node newNode = new Node(data); // assign data // since this will be the last node its next will be NULL newNode.next = null; //if we are entering the first node if(head==null){ head = newNode; newNode.prev = null; return head; } Node last = head; // traverse to the current last node while(last.next!=null) last = last.next; // assign current last node's next to this new node // assign new node's previous to this last node last.next = newNode; newNode.prev = last; // new_node becomes the last node now return head; } static Node insertAfterPosition(int n, int data, Node head) { int len = getLength(head); // if insertion position is 0 means entering at start if(n == 0){ head = insertBeginning(head, data); return head; } // means inserting after last item if(n == len){ head = insertEnd(head, data); return head; } // else insertion will happen somewhere in the middle if(n < 1 || len < n) System.out.println("Invalid position"); else { Node newNode = new Node(data); // can remove null assignments also (constructor takes care of these) // added just for explanation purpose newNode.next = null; newNode.prev = null; // nthNode used to traverse the Linked List Node nthNode = head; // traverse till the nth node while(--n > 0){ nthNode = nthNode.next; } Node nextNode = nthNode.next; // (n+1)th node // assigning (n+1)th node's previous to this new node nextNode.prev = newNode; // new_node's next assigned to (n+1)th node newNode.next= nextNode; // new_node's previous assigned to nth node newNode.prev = nthNode; // assign nth node's next to new_node nthNode.next = newNode; } return head; } static void printList(Node temp) { Node end = null; //as linked list will end when Node reaches Null System.out.print("\nIn forward: "); while(temp!=null) { System.out.print(temp.data + " "); end = temp; temp = temp.next; } System.out.print("\nIn backward: "); while (end != null) { System.out.print(end.data + " "); end = end.prev; } System.out.println(); } // required for insertAfterPosition() method static int getLength(Node node){ int size=0; // traverse to the last node each time incrementing the size while(node!=null) { node = node.next; size++; } return size; } public static void main(String args[]) { Node head = null; head = insertBeginning(head,3); head = insertBeginning(head,2); head = insertBeginning(head,1); head = insertBeginning(head,4); head = insertBeginning(head,7); //Inserts after 4th position head = insertAfterPosition(4,5,head); printList(head); } }
Output
In forward: 7 4 1 2 5 3 In backward: 3 5 2 1 4 7
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others
Doubly Linked List
- Introduction to Doubly Linked list in Data Structure
Click Here - Doubly Linked List in –
- Insertion in doubly linked list –
- Insertion at beginning in doubly linked list –
- Insertion at end in doubly linked list –
- Insertion at nth node in doubly linked list –
- Deletion in doubly linked list –
- Deletion from beginning in doubly linked list :
- Deletion from nth in doubly linked list :
- Deletion from end in doubly linked list :
- Insertion and Deletion in a doubly linked list :
- Insertion in the middle in a doubly linked list :
Doubly Linked List
- Introduction to Doubly Linked list in Data Structure
- Doubly Linked List in – C | C++ | Java
- Insertion in doubly linked list – C | C++ | Java
- Deletion in doubly linked list – C | C++ | Java
- Insertion and Deletion in doubly linked list – C | C++ | Java
- Insertion in the middle in a doubly linked list – C | C++ | Java
Login/Signup to comment