Open In App

Deletion at beginning (Removal of first node) in a Linked List

Last Updated : 30 Aug, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a linked list, The task is to remove the first node from the given linked list.

Examples:

Input : head : 3 -> 12 -> 15 -> 18 -> NULL
Output : 12 -> 15 -> 18 -> NULL

Input : head : 2 -> 4 -> 6 -> 8 -> 33 -> 67 -> NULL
Output : 4 -> 6 -> 8 -> 33 -> 67 -> NULL

By Shifting head node to next node of head – O(1) Time and O(1) Space

To remove the first node of a linked list, store the current head in a temporary variable (temp), move the head pointer to the next node, delete the temporary head node and finally , return the new head of the linked list.

Deletion-at-beginning-

Deletion at beginning in a Linked List

Below is the implementation of the above approach:

C++
// C++ program to delete the head node 
// from a linked list

#include <iostream>
using namespace std;

struct Node {
    int data;
    Node *next;
    Node(int x) {
        data = x;
        next = nullptr;
    }
};

// Delete the head node and return the new head
Node* deleteHead(Node* head) {
  
    // Check if the list is empty
    if (head == nullptr)
        return nullptr;

    // Store the current head in a
  	// temporary variable
    Node* temp = head;

    // Move the head pointer to the next node
    head = head->next;

    // Free the memory of the old head node
    delete temp;

    return head;
}

void printList(Node* curr) {
    while (curr != nullptr) {
      	cout << curr->data << " ";
        curr = curr->next; 
    }
}

int main() {
  
    // Create a hard-coded linked list:
    // 3 -> 12 -> 15 -> 18
    Node* head = new Node(3);
    head->next = new Node(12);
    head->next->next = new Node(15);
    head->next->next->next = new Node(18);
    head = deleteHead(head);
    printList(head);

    return 0;
}
C
// C program to delete the head node
// from a linked list

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node* next;
};

// Delete the head node and return the new head
struct Node* deleteHead(struct Node* head) {
  
    // Check if the list is empty
    if (head == NULL)
        return NULL;

    // Store the current head in a 
  	// temporary variable
    struct Node* temp = head;

    // Move the head pointer to the next node
    head = head->next;

    // Free the memory of the old head node
    free(temp);

    return head;
}

void printList(struct Node* curr) {
  	
    while (curr != NULL) {
        printf("%d ", curr->data);
        curr = curr->next;
    }
}
struct Node *createNode(int new_data){
    struct Node *new_node =
      (struct Node *)malloc(sizeof(struct Node));
    new_node->data = new_data;
    new_node->next = NULL;
    return new_node;
}

int main() {
  
    // Create a hard-coded linked list:
    // 3 -> 12 -> 15 -> 18
    struct Node* head = createNode(3);
    head->next = createNode(12);
    head->next->next = createNode(15);
    head->next->next->next = createNode(18);
    head = deleteHead(head);
    printList(head);

    return 0;
}
Java
// Java program to delete the head node
// from a linked list

class Node {
    int data;
    Node next;

    Node(int data) {
        this.data = data;
        this.next = null;
    }
}

public class GfG {

    // Delete the head node and return the new head
    static Node deleteHead(Node head) {
      
        // Check if the list is empty
        if (head == null)
            return null;

        // Store the current head in a temporary variable
        Node temp = head;

        // Move the head pointer to the next node
        head = head.next;

        // Help the garbage collector by 
      	// removing the reference
        temp = null;

        return head;
    }

    static void printList(Node curr) {
        while (curr != null) {
            System.out.print(curr.data + " ");
            curr = curr.next;
        }
    }

    public static void main(String[] args) {
       
        // Create a hard-coded linked list:
        // 3 -> 12 -> 15 -> 18
        Node head = new Node(3);
        head.next = new Node(12);
        head.next.next = new Node(15);
        head.next.next.next = new Node(18);
        head = deleteHead(head);
        printList(head);
    }
}
Python
# Python program to delete the head node 
# from a linked list

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

# Delete the head node and return the new head
def delete_head(head):
  
    # Check if the list is empty
    if head is None:
        return None

    # Store the current head in a temporary variable
    temp = head

    # Move the head pointer to the next node
    head = head.next

    # Delete the old head by removing the reference
    del temp

    return head

def print_list(curr):
    while curr:
        print(curr.data, end=" ")
        curr = curr.next

if __name__ == "__main__":
   
    # Create a hard-coded linked list:
    # 3 -> 12 -> 15 -> 18
    head = Node(3)
    head.next = Node(12)
    head.next.next = Node(15)
    head.next.next.next = Node(18)
    head = delete_head(head)
    print_list(head)
C#
// C# program to delete the head node
// from a linked list

using System;

class Node {
    public int data;
    public Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class GfG {

    // Delete the head node and return the new head
    static Node DeleteHead(Node head) {
      
        // Check if the list is empty
        if (head == null)
            return null;

        // Move the head pointer to the next node
        head = head.next;

        return head;
    }

    static void PrintList(Node curr) {
        while (curr != null) {
            Console.Write(curr.data + " ");
            curr = curr.next;
        }
    }

    static void Main() {
  
        // Create a hard-coded linked list:
        // 3 -> 12 -> 15 -> 18
        Node head = new Node(3);
        head.next = new Node(12);
        head.next.next = new Node(15);
        head.next.next.next = new Node(18);
        head = DeleteHead(head);
        PrintList(head);
    }
}
JavaScript
// JavaScript program to delete the head
//node from a linked list

class Node {
    constructor(data) {
        this.data = data;
        this.next = null;
    }
}

// Delete the head node and return the new head
function deleteHead(head) {

    // Check if the list is empty
    if (head === null)
        return null;

    // Store the current head in a temporary variable
    let temp = head;

    // Move the head pointer to the next node
    head = head.next;

    // Free the memory of the old head node
    temp = null;

    return head;
}

function printList(curr) {
    while (curr !== null) {
        console.log(curr.data + " ");
        curr = curr.next;
    }

}

// Create a hard-coded linked list:
// 3 -> 12 -> 15 -> 18
let head = new Node(3);
head.next = new Node(12);
head.next.next = new Node(15);
head.next.next.next = new Node(18);

head = deleteHead(head);
printList(head);

Output
12 15 18 

Time Complexity: O(1), because the operation to delete the head node is performed in constant time.
Space Complexity: O(1)



Next Article

Similar Reads