Deletion at end (Removal of last node) in a Linked List (original) (raw)
Last Updated : 30 Jul, 2024
Given a linked list, the task is to delete the last node of the given linked list.
**Examples:
**Input: 1 -> 2 -> 3 -> 4 -> 5 -> NULL
**Output: 1 -> 2 -> 3 -> 4 -> NULL
**Explanation: The last node of the linked list is 5, so 5 is deleted.**Input: 3 -> 12 -> 15-> NULL
**Output: 3 -> 12 -> NULL
**Explanation: The last node of the linked list is 15, so 15 is deleted.
**Approach:
To perform the deletion operation at the end of linked list, we need to traverse the list to find the **second last node, then set its next pointer to **null. If the list is empty then there is no node to delete or has only one node then point **head to **null.
Deletion at the end of linked list
Step-by-step approach:
- Check if list is empty then return **NULL.
- If the list has only one node then delete it and return **NULL.
- Traverse the list to find the second last node.
- Set the next pointer of **second last node to **NULL.
**Implementation:
C++ `
// C++ program to delete the last node of linked list #include using namespace std;
// Node structure for the linked list struct Node { int data; Node* next; Node(int data) : data(data) , next(nullptr) { } };
// Function to remove the last node // of the linked list Node* removeLastNode(struct Node* head) { // If the list is empty, return nullptr if (head == nullptr) { return nullptr; }
// If the list has only one node, delete it and return
// nullptr
if (head->next == nullptr) {
delete head;
return nullptr;
}
// Find the second last node
Node* second_last = head;
while (second_last->next->next != nullptr) {
second_last = second_last->next;
}
// Delete the last node
delete (second_last->next);
// Change next of second last
second_last->next = nullptr;
return head;
}
void printList(Node* head) { while (head != nullptr) { cout << head->data << " -> "; head = head->next; } cout << "nullptr" << endl; }
// Driver code int main() { // Creating a static linked list // 1 -> 2 -> 3 -> 4 -> 5 -> nullptr Node* head = new Node(1); head->next = new Node(2); head->next->next = new Node(3); head->next->next->next = new Node(4); head->next->next->next->next = new Node(5);
cout << "Original list: ";
printList(head);
// Removing the last node
head = removeLastNode(head);
cout << "List after removing the last node: ";
printList(head);
return 0;
}
C
// C program to delete the last node of linked list
#include <stdio.h> #include <stdlib.h>
// Node structure for the linked list struct Node { int data; struct Node* next; };
// Function to create a new node struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; }
// Function to remove the last node of the linked list struct Node* removeLastNode(struct Node* head) { // If the list is empty, return NULL if (head == NULL) { return NULL; }
// If the list has only one node, delete it and return
// NULL
if (head->next == NULL) {
free(head);
return NULL;
}
// Find the second last node
struct Node* second_last = head;
while (second_last->next->next != NULL) {
second_last = second_last->next;
}
// Delete the last node
free(second_last->next);
// Change next of second last
second_last->next = NULL;
return head;
}
// Function to print linked list void printList(struct Node* head) { while (head != NULL) { printf("%d -> ", head->data); head = head->next; } printf("NULL\n"); }
// Driver code int main() { // Creating a static linked list // 1 -> 2 -> 3 -> 4 -> 5 -> NULL struct Node* head = createNode(1); head->next = createNode(2); head->next->next = createNode(3); head->next->next->next = createNode(4); head->next->next->next->next = createNode(5);
printf("Original list: ");
printList(head);
// Removing the last node
head = removeLastNode(head);
printf("List after removing the last node: ");
printList(head);
return 0;
}
Java
// C program to delete the last node of linked list
// Node structure for the linked list class Node { int data; Node next;
Node(int data)
{
this.data = data;
this.next = null;
}
}
public class GFG {
// Function to remove the last node of the linked list
public static Node removeLastNode(Node head)
{
// If the list is empty, return null
if (head == null) {
return null;
}
// If the list has only one node, delete it and
// return null
if (head.next == null) {
return null;
}
// Find the second last node
Node secondLast = head;
while (secondLast.next.next != null) {
secondLast = secondLast.next;
}
// Delete the last node
secondLast.next = null;
return head;
}
// Function to print the linked list
public static void printList(Node head)
{
while (head != null) {
System.out.print(head.data + " -> ");
head = head.next;
}
System.out.println("null");
}
// Driver code
public static void main(String[] args)
{
// Creating a static linked list
// 1 -> 2 -> 3 -> 4 -> 5 -> null
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
System.out.println("Original list: ");
printList(head);
// Removing the last node
head = removeLastNode(head);
System.out.println(
"List after removing the last node: ");
printList(head);
}
}
Python
Python program to delete the last node of linked list
Node structure for the linked list
class Node: def init(self, data): self.data = data self.next = None
Function to remove the last node of the linked list
def remove_last_node(head): # If the list is empty, return None if not head: return None
# If the list has only one node, delete it and return None
if not head.next:
return None
# Find the second last node
second_last = head
while second_last.next.next:
second_last = second_last.next
# Delete the last node
second_last.next = None
return head
Function to print the linked list
def print_list(head): while head: print(head.data, end=" -> ") head = head.next print("None")
Driver code
if name == "main":
# Creating a static linked list
# 1 -> 2 -> 3 -> 4 -> 5 -> None
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(4)
head.next.next.next.next = Node(5)
print("Original list: ")
print_list(head)
# Removing the last node
head = remove_last_node(head)
print("List after removing the last node: ")
print_list(head)
C#
// C# program to delete the last node of linked list
using System;
// Node structure for the linked list public class Node { public int data; public Node next;
public Node(int data)
{
this.data = data;
this.next = null;
}
}
public class LinkedList {
// Function to remove the last node of the linked list
public static Node RemoveLastNode(Node head)
{
// If the list is empty, return null
if (head == null) {
return null;
}
// If the list has only one node, delete it and
// return null
if (head.next == null) {
return null;
}
// Find the second last node
Node secondLast = head;
while (secondLast.next.next != null) {
secondLast = secondLast.next;
}
// Delete the last node
secondLast.next = null;
return head;
}
// Function to print the linked list
public static void PrintList(Node head)
{
while (head != null) {
Console.Write(head.data + " -> ");
head = head.next;
}
Console.WriteLine("null");
}
// Driver code
public static void Main(string[] args)
{
// Creating a static linked list
// 1 -> 2 -> 3 -> 4 -> 5 -> null
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
Console.WriteLine("Original list: ");
PrintList(head);
// Removing the last node
head = RemoveLastNode(head);
Console.WriteLine(
"List after removing the last node: ");
PrintList(head);
}
}
JavaScript
// Javascript program to delete the last node of linked list
// Node structure for the linked list class Node { constructor(data) { this.data = data; this.next = null; } }
// Function to remove the last node of the linked list function removeLastNode(head) { // If the list is empty, return null if (!head) { return null; }
// If the list has only one node, delete it and return null
if (!head.next) {
return null;
}
// Find the second last node
let secondLast = head;
while (secondLast.next.next) {
secondLast = secondLast.next;
}
// Delete the last node
secondLast.next = null;
return head;
}
// Function to print the linked list function printList(head) { while (head) { process.stdout.write(head.data + " -> "); head = head.next; } console.log("null"); }
// Driver code // Creating a static linked list // 1 -> 2 -> 3 -> 4 -> 5 -> null let head = new Node(1); head.next = new Node(2); head.next.next = new Node(3); head.next.next.next = new Node(4); head.next.next.next.next = new Node(5);
console.log("Original list: "); printList(head);
// Removing the last node head = removeLastNode(head);
console.log("List after removing the last node: "); printList(head);
`
Output
Original list: 1 -> 2 -> 3 -> 4 -> 5 -> nullptr List after removing the last node: 1 -> 2 -> 3 -> 4 -> nullptr
**Time Complexity: O(n), traversal of the linked list till its end, so the time complexity required is _O(n).
**Auxiliary Space: O(1)