Description
To delete a node from end of the singly linked list -
Case 1: check if list is empty
Show message that list is empty.
Case 2: When list has only one elements
step 1: Assign the address of head to temporary variable
step 2: Assign NULL to head.
step 3: Free the memory occupied by node
Case 3: When linked list has more than one elements
step 1: Traverse the list to reach last node.
step 2: Maintain one more field which contain the address of previous node.
step 3: Assign the NULL to the address field of previous node of last node.
step 4: Free the memory occupied by last node.
Note: Here head contains the address of first node
C/C++
/* C Program To Delete a Node from end in singly linked list */
//Save it as delete_node_end_singly_linked_list.java
#include<stdio.h>
#include<malloc.h>
struct node *create(int);
void display(struct node *);
struct node *delete_end(struct node *);
//Declaring node
struct node{
int data;
struct node *next;
};
int main(){
int n;
struct node *head;
printf("Enter number of nodes : ");
scanf("%d",&n);
//Calling function to create node
head=create(n);
//Calling function to display list
display(head);
//Code to delete a node from end
head=delete_end(head);
printf("\nThe linked list after deletion of node from end - \n");
//Calling function to display list after deletion of a node from end
display(head);
return 0;
}
struct node *create(int n){
int i;
struct node *head=NULL;
struct node *ptr,*newNode;
for(i=0;i<n;i++){
//Creating a new node
newNode=(struct node*)malloc(sizeof(struct node*));
//Assigning data to newly created node
printf("Enter the value of %d node : ",i+1);
scanf("%d",&newNode->data);
newNode->next=NULL;
/*If list is empty assign the address of newly created node to head*/
if(head==NULL){
head=newNode;
}else{
/* If list already have few elements then loop through
list and add newly created node after given node*/
ptr=head;
while(ptr->next!=NULL){
ptr=ptr->next;
}
ptr->next=newNode;
}
}
return head;
}
void display(struct node *head){
struct node *ptr;
//If list is empty
if(head==NULL){
printf("The linked list is empty");
}else{
/*If list has elements then loop through the loop and
print elements one by one in sequential manner*/
ptr=head;
while(ptr!=NULL){
printf("The node value = %d and their address = %u\n",ptr->data,ptr);
ptr=ptr->next;
}
}
}
//Function to delete a node from end
struct node *delete_end(struct node *head){
struct node *preptr, *ptr;
//If list do not have any element, show proper message
if(head==NULL){
printf("\nLink list is empty..No node to delete!!");
}else if(head->next==NULL){
//If list have only one element
ptr=head;
head=NULL;
free(ptr);
}else{
//If list have more than one elements
ptr=head;
while(ptr->next!=NULL){
preptr=ptr;
ptr=ptr->next;
}
preptr->next=NULL;
free(ptr);
}
return head;
}
Input:
Enter number of nodes : 5
Enter the value of 1 node : 1
Enter the value of 2 node : 2
Enter the value of 3 node : 3
Enter the value of 4 node : 4
Enter the value of 5 node : 5
The node value = 1 and their address = 5508432
The node value = 2 and their address = 5508464
The node value = 3 and their address = 5508480
The node value = 4 and their address = 5508496
The node value = 5 and their address = 5508512
Output:
The linked list after deletion of node from end -
The node value = 1 and their address = 5508432
The node value = 2 and their address = 5508464
The node value = 3 and their address = 5508480
The node value = 4 and their address = 5508496
Java
/* Java Program To Delete a Node from end in singly linked list */
//Save it as DeleteNodeEndSinglyLinkedList.java
import java.io.*;
import java.util.Scanner;
public class DeleteNodeEndSinglyLinkedList {
// Declaring node
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
// Assigning null value to the next field
this.next = null;
}
}
public Node head = null;
// Function to add node
public void addNode(int data) {
// Creating a new node
Node newNode = new Node(data);
/* If list is empty assign the address of newly created node to head */
if (head == null) {
head = newNode;
} else {
/*
* If list already have few elements then loop through list and
*/
Node ptr = head;
while (ptr.next != null) {
ptr = ptr.next;
}
ptr.next = newNode;
}
}
public void display() {
Node ptr = head;
// If list is empty
if (ptr == null) {
System.out.println("The list is empty");
return;
}
System.out.println("The nodes of lists are : ");
/*
* If list has elements then loop through the loop and print elements one by one
* in sequential manner
*/
while (ptr != null) {
System.out.print(ptr.data + " ");
ptr = ptr.next;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
DeleteNodeEndSinglyLinkedList list = new DeleteNodeEndSinglyLinkedList();
System.out.println("Enter number of node you want to enter : ");
int n = scanner.nextInt();
for (int i = 0; i < n; i++) {
System.out.println("Enter value of " + (i + 1) + " node : ");
int val = scanner.nextInt();
list.addNode(val);
}
// Calling function to display list
list.display();
list.delete_end();
// Calling function to display list after deletion of a node from end
System.out.println("\nAfter deletion of a node from end - ");
list.display();
}
//Function to delete a node from end
private void delete_end() {
Node preptr = null, ptr;
//If list do not have any element, show proper message
if(head==null) {
System.out.println("Link list is empty..No node to delete!!");
}else if(head.next==null) {
//If list have only one element
ptr=head;
head=null;
}else {
//If list have more than one elements
ptr=head;
while(ptr.next!=null) {
preptr=ptr;
ptr=ptr.next;
}
preptr.next=null;
}
}
}
Input:
Enter number of node you want to enter :
5
Enter value of 1 node :
1
Enter value of 2 node :
2
Enter value of 3 node :
3
Enter value of 4 node :
4
Enter value of 5 node :
5
The nodes of lists are :
1 2 3 4 5
Output:
After deletion of a node from end -
The nodes of lists are :
1 2 3 4
Related Programs
1) Program To Create And Display Singly Linked List2) Program To Add A Node In Beginning Of Singly Linked List
3) Program To Add A Node In The End Of Singly Linked List
4) Program To Add A Node Before A Given Node Singly Linked List
5) Program To Add A Node After A Given Node Singly Linked List
6) Program To Delete Node From Beginning Singly Linked List
7) Program To Delete Given Node Singly Linked List
8) Program To Delete Node Before Given Node Singly Linked List
9) Program To Delete Node After Given Node Singly Linked List
10) Program To Delete All Nodes Of Singly Linked List
11) Program To Sort Elements Of Singly Linked List
12) Program To Reverse Elements Singly Linked List
13) Program to Find Maximum And Minimum Value Node In Singly Linked List
14) Program to Search an Element In Singly Linked List
15) Program To Remove Duplicate Elements From Singly Linked List
16) Program To Create And Display Circular Singly Linked List
17) Program To Add A Node At The Beginning Of Circular Linked List