Open In App

Insert a Node at Front/Beginning of a Linked List

Last Updated : 26 Jul, 2024
Suggest changes
Share
Like Article
Like
Report

Given a linked list, the task is to insert a new node at the beginning/start/front of the linked list.

Example:

Input: LinkedList = 2->3->4->5, NewNode = 1
Output: 1 2 3 4 5

Input: LinkedList = 2->10, NewNode = 1
Output: 1 2 10

Approach:

To insert a new node at the front, we create a new node and point its next reference to the current head of the linked list. Then, we update the head to be this new node. This operation is efficient because it only requires adjusting a few pointers.

Insertion-at-the-Beginning-of-Singly-Linked-List
Insertion at Front/Beginning of Linked List

Algorithm:

  • Make the first node of Linked List linked to the new node
  • Remove the head from the original first node of Linked List
  • Make the new node as the Head of the Linked List.

Below is the implementation of the approach:

C++
// C++ Program to insert the node at the beginning of // Linked List #include <bits/stdc++.h> using namespace std; // Define a node in the linked list struct Node {  int data; // Data stored in the node  Node* next; // Pointer to the next node in the list  // Constructor to initialize the node  Node(int new_data)  {  data = new_data;  next = nullptr; // Set next to null  } }; // Function to insert a new node at the beginning of the // list Node* insertAtFront(Node* head, int new_data) {  // Create a new node with the given data  Node* new_node = new Node(new_data);  // Make the next of the new node point to the current  // head  new_node->next = head;  // Return the new node as the new head of the list  return new_node; } // Function to print the contents of the linked list void printList(Node* head) {  // Start from the head of the list  Node* curr = head;  // Traverse the list  while (curr != nullptr) {  // Print the current node's data  cout << " " << curr->data;  // Move to the next node  curr = curr->next;  }  // Print a newline at the end  cout << endl; } // Driver code to test the functions int main() {  // Create the linked list 2->3->4->5  Node* head = new Node(2);  head->next = new Node(3);  head->next->next = new Node(4);  head->next->next->next = new Node(5);  // Print the original list  cout << "Original Linked List:";  printList(head);  // Insert a new node at the front of the list  cout << "After inserting Nodes at the front:";  int data = 1;  head = insertAtFront(head, data);  // Print the updated list  printList(head);  return 0; } 
C
// C Program to insert the node at the beginning of // Linked List #include <stdio.h> #include <stdlib.h> // Define a node in the linked list struct Node {  int data; // Data stored in the node  struct Node*  next; // Pointer to the next node in the list }; // Function to create a new node with the given data struct Node* createNode(int new_data) {  // Allocate memory for a new node  struct Node* new_node  = (struct Node*)malloc(sizeof(struct Node));  // Initialize the node's data  new_node->data = new_data;  // Set the next pointer to NULL  new_node->next = NULL;  // Return the newly created node  return new_node; } // Function to insert a new node at the beginning of the // list struct Node* insertAtFront(struct Node* head, int new_data) {  // Create a new node with the given data  struct Node* new_node = createNode(new_data);  // Make the next of the new node point to the current  // head  new_node->next = head;  // Return the new node as the new head of the list  return new_node; } // Function to print the contents of the linked list void printList(struct Node* head) {  // Start from the head of the list  struct Node* curr = head;  // Traverse the list  while (curr != NULL) {  // Print the current node's data  printf(" %d", curr->data);  // Move to the next node  curr = curr->next;  }  // Print a newline at the end  printf("\n"); } // Driver code to test the functions int main() {  // Create the linked list 2->3->4->5  struct Node* head = createNode(2);  head->next = createNode(3);  head->next->next = createNode(4);  head->next->next->next = createNode(5);  // Print the original list  printf("Original Linked List:");  printList(head);  // Insert a new node at the front of the list  printf("After inserting Nodes at the front:");  int data = 1;  head = insertAtFront(head, data);  // Print the updated list  printList(head);  return 0; } 
Java
// Java Program to insert the node at the beginning of // Linked List class Node {  int data; // Data stored in the node  Node next; // Pointer to the next node in the list  // Constructor to initialize the node  Node(int new_data) {  data = new_data;  next = null;  } } public class GFG {  // Function to insert a new node at the beginning of the list  public static Node insertAtFront(Node head, int new_data) {  // Create a new node with the given data  Node new_node = new Node(new_data);    // Make the next of the new node point to the current head  new_node.next = head;    // Return the new node as the new head of the list  return new_node;  }  // Function to print the contents of the linked list  public static void printList(Node head) {  // Start from the head of the list  Node curr = head;    // Traverse the list  while (curr != null) {  // Print the current node's data  System.out.print(" " + curr.data);    // Move to the next node  curr = curr.next;  }    // Print a newline at the end  System.out.println();  }  // Driver code to test the functions  public static void main(String[] args) {  // Create the linked list 2->3->4->5  Node head = new Node(2);  head.next = new Node(3);  head.next.next = new Node(4);  head.next.next.next = new Node(5);  // Print the original list  System.out.println("Original Linked List:");  printList(head);  // Insert a new node at the front of the list  System.out.println("After inserting Nodes at the front:");  int data = 1;  head = insertAtFront(head, data);    // Print the updated list  printList(head);  } } 
Python
# Python Program to insert the node at the beginning of # Linked List class Node: def __init__(self, new_data): # Initialize the node's data self.data = new_data # Set the next pointer to None self.next = None def insert_at_front(head, new_data): # Create a new node with the given data new_node = Node(new_data) # Make the next of the new node point to the current head new_node.next = head # Return the new node as the new head of the list return new_node def print_list(head): # Start from the head of the list curr = head # Traverse the list while curr is not None: # Print the current node's data print(f" {curr.data}", end="") # Move to the next node curr = curr.next # Print a newline at the end print() # Driver code to test the functions if __name__ == "__main__": # Create the linked list 2->3->4->5 head = Node(2) head.next = Node(3) head.next.next = Node(4) head.next.next.next = Node(5) # Print the original list print("Original Linked List:", end="") print_list(head) # Insert a new node at the front of the list print("After inserting Nodes at the front:", end="") data = 1 head = insert_at_front(head, data) # Print the updated list print_list(head) 
JavaScript
// JavaScript Program to insert the node at the beginning of // Linked List class Node {  constructor(newData)  {  // Initialize the node's data  this.data = newData;  // Set the next pointer to null  this.next = null;  } } // Function to insert a new node at the beginning of the // list function insertAtFront(head, newData) {  // Create a new node with the given data  const newNode = new Node(newData);  // Make the next of the new node point to the current  // head  newNode.next = head;  // Return the new node as the new head of the list  return newNode; } // Function to print the contents of the linked list function printList(head) {  // Start from the head of the list  let curr = head;  let result = "";  // Traverse the list  while (curr !== null) {  // Append the current node's data to result  result += " " + curr.data;  // Move to the next node  curr = curr.next;  }  // Print the result  console.log(result); } // Driver code to test the functions function main() {  // Create the linked list 2->3->4->5  let head = new Node(2);  head.next = new Node(3);  head.next.next = new Node(4);  head.next.next.next = new Node(5);  // Print the original list  console.log("Original Linked List:");  printList(head);  // Insert a new node at the front of the list  console.log("After inserting Nodes at the front:");  const data = 1;  head = insertAtFront(head, data);  // Print the updated list  printList(head); } main(); // Execute the driver code 

Output
Original Linked List: 2 3 4 5 After inserting Nodes at the front: 1 2 3 4 5 

Time Complexity: O(1), We have a pointer to the head and we can directly attach a node and update the head pointer. So, the Time complexity of inserting a node at the head position is O(1).
Auxiliary Space: O(1)


Similar Reads

Article Tags :