Link list deletion
In this article, we will learn how to delete a node from a linked list.
Linked list deletion algorithm
Let head
be a pointer to the first node of the linked list and let temp
be the value of the node to be deleted from the linked list.
Iterative Algorithm
-
Initialize pointer
curr
to point tohead
for traversing the linked list andprev
set toNULL
to keep track of the node before when deletingtemp
. -
If the node to be deleted is
head
, that is,temp
!=NULL
&&curr->data
==temp
, thenhead
set tocurr->next
and deletecurr
. -
Otherwise, do the following until we reach the node we want to delete.
-
prev
=temp
。 -
temp
=temp->next
。
-
-
If
temp
==NULL
, return; -
Set
prev->next
totemp->next
, and deletetemp
the node.
Recursive Algorithm
-
If
head
==NULL
, then the linked list is empty and there is no element to be deleted. Therefore, return; -
If
head->data
==temp
, we found the node to delete.-
Store
head
in a temporary nodet
. -
Set
head
tohead->next
to remove the node. -
Delete
t
and return to the earlier recursive call.
-
Store
-
If none of the above conditions are met, recursively call
head->next
ondeleteNode()
to continue searching for nodes.
Linked list deletion diagram
Suppose we have the following linked list 1 -> 2 -> 3 -> 4
, and we want to remove 3
the node whose value is .
- Initializes a pointer to the node
with values
1
and .prev
head
curr
NULL
-
Move repeatedly
curr
until you reach a node with values of3
and .prev
2
-
To point to
prev
( ie2
) .curr->next
4
-
Delete the node
3
whose value iscurr
.
Linked List Removal Implementation
#include <bits/stdc++.h>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int x) {
this->data = x;
this->next = NULL;
}
};
void deleteNode(Node*& head, int val)
{
if (head == NULL) {
cout << "Element not present in the list\n";
return;
}
if (head->data == val) {
Node* t = head;
head = head->next;
delete (t);
return;
}
deleteNode(head->next, val);
}
void deleteiter(Node** head, int x)
{
Node* temp = *head;
Node* prev = NULL;
if (temp != NULL && temp->data == x)
{
*head = temp->next;
delete temp;
return;
}
else
{
while (temp != NULL && temp->data != x)
{
prev = temp;
temp = temp->next;
}
if (temp == NULL)
return;
prev->next = temp->next;
delete temp;
}
}
void printList(Node* head)
{
Node*curr = head;
while (curr != NULL) {
cout << curr->data << " ";
curr = curr->next;
}
cout << "\n";
}
int main()
{
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);
printList(head);
deleteNode(head, 3);
printList(head);
deleteiter(&head, 4);
printList(head);
return 0;
}
Complexity of linked list deletion algorithm
Time Complexity
- Average situation
To delete 第 i 个
a node at position in a linked list, we have to visit i
nodes. Therefore, the time complexity is about O(i)
. Moreover, there are nodes in the linked list n
, so the time complexity in the average case is O(n/2)
or O(n)
. The time complexity is about O(n)
.
- Best Case
The best case scenario is when we want to remove the head of a linked list. The time complexity for the best case scenario is O(1)
.
- Worst case scenario
The worst case time complexity is O(n)
. This is the same as the average case time complexity.
Space complexity
In case of iterative implementation, the space complexity of this algorithm is O(1)
, since it does not require any data structures except temporary variables.
In a recursive implementation, the space complexity is 1/2 due to the space required for the recursive call stack O(n)
.
For reprinting, please send an email to 1244347461@qq.com for approval. After obtaining the author's consent, kindly include the source as a link.
Related Articles
Learning the Sorting Algorithm - Insertion Sort (Concepts)
Publish Date:2025/03/19 Views:96 Category:ALGORITHM
-
What is "insertion sort"? The concept is as follows: each time a record to be sorted is inserted into the previously sorted sequence according to its key size, until all records are inserted. Concepts are always somewhat abstract, and can a
Learning path of sorting algorithm - direct insertion sort
Publish Date:2025/03/19 Views:176 Category:ALGORITHM
-
This article follows up on Insertion Sort (Concepts) and presents the implementation steps and code for direct insertion sort. Since the Concepts section already has a large number of illustrations, it would be a bit long-winded to provide
Learning the sorting algorithm - Binary Insertion Sort
Publish Date:2025/03/19 Views:143 Category:ALGORITHM
-
This article follows the insertion sort (concept article) and presents the implementation steps and implementation code of the binary insertion sort Binary Insertion Sort Algorithm Steps Treat the first element of the first sequence to be s
The road to learning sorting algorithms - table insertion sort
Publish Date:2025/03/19 Views:194 Category:ALGORITHM
-
Table insertion sort was briefly mentioned in Insertion sort (concept) . I briefly summarized it and wrote this article. You can refer to it if you need it. Table insertion sort, as the name implies, uses an index table to sort the original
The road to learning sorting algorithms - Hill sort
Publish Date:2025/03/19 Views:52 Category:ALGORITHM
-
Hill sort is named after the designer of the algorithm, Hill. It is an improvement of Hill on the basis of insertion sort and can be said to be a special insertion sort. Here are the properties of insertion sort: First of all, the insertion
Things about the singleton design pattern
Publish Date:2025/03/19 Views:53 Category:ALGORITHM
-
The singleton design pattern is one of the most commonly used design patterns. The singleton design pattern, just by its name, you can roughly know its meaning. Single means one; instance means instance object. So a singleton has only one i
The road to learning sorting algorithms - merge sort
Publish Date:2025/03/19 Views:158 Category:ALGORITHM
-
Let's first look at the definition of merge sort Merge sort is an effective sorting algorithm based on the merge operation. This algorithm is a very typical application of the Divide and Conquer method. Merge the ordered subsequences to obt
The road to learning sorting algorithms - merge sort (non-recursive implementatio
Publish Date:2025/03/19 Views:189 Category:ALGORITHM
-
In the article "Merge Sort", we introduced the principles and operation steps of merge sort, and finally implemented the sorting algorithm using PHP code. In the program, we used the principle of recursion to implement the algorithm. In fac
The road to learning sorting algorithms - quick sort
Publish Date:2025/03/19 Views:122 Category:ALGORITHM
-
Quick sort is a sorting algorithm developed by Tony Hall. On average, sorting n items requires O(n log n) comparisons. In the worst case, O(n2) comparisons are required, but this is uncommon. In fact, quick sort is often significantly faste