# Delete Nth Node of the Linked List

Delete Nth Node of the Linked List” is a basic problem exercise for beginners based on linked list. Here, we are given a linked list and our task to delete nth position node.

To do so, we need to traverse the linked list to the node just before the nth node, then change the pointer of that node to next to next node and then delete the nth node.

For example, we need to delete the 2nd node from the following linked list.

The steps required to delete the nth node from the linked list are as follows:

1. If Linked List is empty, simply return.
2. If the Node to be deleted is first node, then make head of the linked list to the second node. If second node does not exist(linked list is empty), then mark head of the Linked List to NULL.
3. If the node to be deleted is not first node, then, traverse linked list to nth node of the linked list and mark pointer to just before the nth node know as ‘previous’ node.
4. Then, point the pointer of previous node to the next of nth node of the linked list.
5. Lastly, delete nth node of the linked list.

#### C++ Program to delete Nth node of the linked list is as follows:

```/* Program to delete nth node of the linked list */
#include<bits/stdc++.h>
using namespace std;

/* Structure of node of the linked list */
struct node
{
int data;
struct node *next;
};

/* Function to Insert Node at the end of the Linked List */
void insert_end(struct node **head, int ele)
{
/* Creating a new node */
struct node *new_node;
new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = ele;
new_node->next = NULL;

/* Check whether the linked list is empty or not */

/* If Linked List is empty */
{
return;
}

/* If Linked List is not empty, then traverse the linked list
and point the pointer of the last node to the new node*/
struct node *temp = NULL;
while(temp->next != NULL)
temp=temp->next;
temp->next = new_node;
}

/* Function to delete Nth Node of the Linked List */
void deleteNth(struct node **head,int n)
{
/* If Linked List is empty,  there is no node to delete, hence return */
if( *head == NULL)
return;
struct node *temp = *head , *prev = NULL;
/* If first node is to be deleted, then mark the head to
the next of first node, and delete first node*/
if(n==1)
{
delete temp;
return;
}
int i;
/* For Nth Node to be deleted, traverse the linked list to Nth node and store the pointer
to (n-1)th node, after that mark the pointer of (n-1)th node to the next of nth node. Then,
delete Nth Node */
for(i = 1; i < n && temp!=NULL; i++)
{
prev = temp;
temp=temp->next;
}
if(i < n)
return; // there are less number of nodes
prev->next = temp->next;
delete temp;
}

/* Function to print Nth Node*/
void print(struct node *head)
{
struct node *p = head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
int main()
{
/* Inserting Some Nodes in the Linked List */
cout<<"The linked list elements before deleting 3rd node: \n";
cout<<"\n The linked list elements after deleting 3rd node: \n";
```OUTPUT: