Python Program For Inserting A Node After The N-th Node From The End
Insert a node x after the nth node from the end in the given singly linked list. It is guaranteed that the list contains the nth node from the end. Also 1 <= n.
Examples:
Input : list: 1->3->4->5 n = 4, x = 2 Output : 1->2->3->4->5 4th node from the end is 1 and insertion has been done after this node. Input : list: 10->8->3->12->5->18 n = 2, x = 11 Output : 10->8->3->12->5->11->18
Method 1 (Using length of the list):
Find the length of the linked list, i.e, the number of nodes in the list. Let it be len. Now traverse the list from the 1st node upto the (len-n+1)th node from the beginning and insert the new node after this node. This method requires two traversals of the list.
Python3
# Python implementation to insert a node after # the n-th node from the end # Linked List node class Node: def __init__( self , data): self .data = data self . next = None # function to get a new node def getNode(data) : # allocate memory for the node newNode = Node( 0 ) # put in the data newNode.data = data newNode. next = None return newNode # function to insert a node after the # nth node from the end def insertAfterNthNode(head, n, x) : # if list is empty if (head = = None ) : return # get a new node for the value 'x' newNode = getNode(x) ptr = head len = 0 i = 0 # find length of the list, i.e, the # number of nodes in the list while (ptr ! = None ) : len = len + 1 ptr = ptr. next # traverse up to the nth node from the end ptr = head i = 1 while ( i < = ( len - n) ) : ptr = ptr. next i = i + 1 # insert the 'newNode' by making the # necessary adjustment in the links newNode. next = ptr. next ptr. next = newNode # function to print the list def printList( head) : while (head ! = None ): print (head.data ,end = " " ) head = head. next # Driver code # Creating list 1->3->4->5 head = getNode( 1 ) head. next = getNode( 3 ) head. next . next = getNode( 4 ) head. next . next . next = getNode( 5 ) n = 4 x = 2 print ( "Original Linked List: " ) printList(head) insertAfterNthNode(head, n, x) print () print ( "Linked List After Insertion: " ) printList(head) # This code is contributed by Arnab Kundu |
Output:
Original Linked List: 1 3 4 5 Linked List After Insertion: 1 2 3 4 5
Time Complexity: O(n), where n is the number of nodes in the list.
Method 2 (Single traversal):
This method uses two pointers, one is slow_ptr and the other is fast_ptr. First move the fast_ptr up to the nth node from the beginning. Make the slow_ptr point to the 1st node of the list. Now, simultaneously move both the pointers until fast_ptr points to the last node. At this point the slow_ptr will be pointing to the nth node from the end. Insert the new node after this node. This method requires single traversal of the list.
Python3
# Python3 implementation to insert a # node after the nth node from the end # Structure of a node class Node: def __init__( self , data): self .data = data self . next = None # Function to get a new node def getNode(data): # Allocate memory for the node newNode = Node(data) return newNode # Function to insert a node after the # nth node from the end def insertAfterNthNode(head, n, x): # If list is empty if (head = = None ): return # Get a new node for the value 'x' newNode = getNode(x) # Initializing the slow and fast pointers slow_ptr = head fast_ptr = head # Move 'fast_ptr' to point to the nth # node from the beginning for i in range ( 1 , n): fast_ptr = fast_ptr. next # Iterate until 'fast_ptr' points to the # last node while (fast_ptr. next ! = None ): # Move both the pointers to the # respective next nodes slow_ptr = slow_ptr. next fast_ptr = fast_ptr. next # Insert the 'newNode' by making the # necessary adjustment in the links newNode. next = slow_ptr. next slow_ptr. next = newNode # Function to print the list def printList(head): while (head ! = None ): print (head.data, end = ' ' ) head = head. next # Driver code if __name__ = = '__main__' : # Creating list 1.3.4.5 head = getNode( 1 ) head. next = getNode( 3 ) head. next . next = getNode( 4 ) head. next . next . next = getNode( 5 ) n = 4 x = 2 print ( "Original Linked List: " , end = '') printList(head) insertAfterNthNode(head, n, x) print (" Linked List After Insertion: ", end = '') printList(head) # This code is contributed by rutvik_56 |
Output:
Original Linked List: 1 3 4 5 Linked List After Insertion: 1 2 3 4 5
Time Complexity: O(n), where n is the number of nodes in the list.
Please refer complete article on Insert a node after the n-th node from the end for more details!