এই টিউটোরিয়ালে আমরা শিখব কিভাবে একটি ডাবলি লিংকড লিস্টে দেওয়া পজিশনে একটি নোড মুছে ফেলতে হয়।
সমস্যা সমাধানের ধাপসমূহ
ডেটা, প্রিভিয়াস (prev) এবং নেক্সট (next) পয়েন্টার সহ একটি স্ট্রাকচার (struct) লিখুন।
ডাবলি লিংকড লিস্টে নোড ইনসার্ট করার জন্য একটি ফাংশন লিখুন।
ডামি ডেটা দিয়ে ডাবলি লিংকড লিস্টটি ইনিশিয়ালাইজ করুন।
মুছে ফেলার জন্য পজিশন ইনিশিয়ালাইজ করুন।
লিংকড লিস্টের ওপর ইটারেট করে দেওয়া পজিশনের নোডটি খুঁজে বের করুন।
নোড মুছে ফেলার জন্য একটি ফাংশন লিখুন। নোড মুছে ফেলার সময় নিম্নলিখ তিনটি কেস বিবেচনা করুন:
যদি নোডটি হেড নোড হয়, তবে হেডকে নেক্সট নোডে সরিয়ে দিন।
যদি নোডটি মিডিল নোড হয়, তবে নেক্সট নোডকে প্রিভিয়াস নোডের সাথে লিঙ্ক করুন।
যদি নোডটি শেষ নোড হয়, তবে প্রিভিয়াস নোডের লিঙ্কটি সরিয়ে দিন।
উদাহরণ
নিচে কোডটি দেওয়া হলো:
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
struct Node *prev, *next;
};
void deleteNode(struct Node** head_ref, struct Node* del) {
if (*head_ref == NULL || del == NULL) {
return;
}
// head node
if (*head_ref == del) {
*head_ref = del->next;
}
// middle node
if (del->next != NULL) {
del->next->prev = del->prev;
}
// end node
if (del->prev != NULL) {
del->prev->next = del->next;
}
free(del);
}
void deleteNodeAtGivenPosition(struct Node** head_ref, int n) {
if (*head_ref == NULL || n <= 0) {
return;
}
struct Node* current = *head_ref;
int i;
for (int i = 1; current != NULL && i < n; i++) {
current = current->next;
}
if (current == NULL) {
return;
}
deleteNode(head_ref, current);
}
void insertNode(struct Node** head_ref, int new_data) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->prev = NULL;
new_node->next = (*head_ref);
if ((*head_ref) != NULL) {
(*head_ref)->prev = new_node;
}
(*head_ref) = new_node;
}
void printLinkedList(struct Node* head) {
while (head != NULL) {
cout << head->data << "->";
head = head->next;
}
}
int main() {
struct Node* head = NULL;
insertNode(&head, 5);
insertNode(&head, 2);
insertNode(&head, 4);
insertNode(&head, 8);
insertNode(&head, 10);
cout << "Doubly linked list before deletion" << endl;
printLinkedList(head);
int n = 2;
deleteNodeAtGivenPosition(&head, n);
cout << "\nDoubly linked list after deletion" << endl;
printLinkedList(head);
return 0;
}
আউটপুট
উপরের প্রোগ্রামটি এক্সিকিউট করলে নিচের ফলাফলটি পাওয়া যাবে:
Doubly linked list before deletion 10->8->4->2->5-> Doubly linked list after deletion 10->4->2->5->
নিষ্কর্ষ
এই টিউটোরিয়াল সম্পর্কে আপনার কোনো প্রশ্ন থাকলে কমেন্ট সেকশনে জানাতে পারেন।