যেই algorithm or process follow করে আমরা doubly linked list এ value insert করেছিলাম অনেকটা ঠিক সেই algorithm follow করেই delete operation চালাবো।
এখানেও ঠিক same ভাবে head এবং tail এর জন্য আলাদা operation চালাতে হবে।
অর্থাৎ, যেই node delete করতে হবে সেটা আশেপাশের node গুলো থেকে বিচ্ছিন্ন করতে হবে। Delete operation এর সময় যেহেতু কোনো deleted node আমাদের আর কোনো কাজে লাগবে না তাই এটা আরেকটা কাজ করা লাগবে সেটা হলো node টা memory level থেকেও delete করতে হবে।
এবার একটা code এর মাধ্যমে ব্যাপারটা বুঝা যাকঃ
//এই function এর মাধ্যমে যেকোনো given position থেকে value delete করা হবে।
//এখানে head এবং position নেয়া হচ্ছে parameter এ।
void delete_at_position(Node *head, int pos)
{
Node *tmp = head; //temporary variable এ head রাখা হচ্ছে।
for (int i = 1; i <= pos - 1; i++) //এই loop এর মাধ্যমে আমরা position অব্দি যাচ্ছি।
{
tmp = tmp->next;
}
Node *deleteNode = tmp->next; // একটা delete node এ যেই node করতে হবে সেটা রাখা হচ্ছে।
tmp->next = tmp->next->next; // delete node এর পরের value এর সাথে আগের value এর connection create করা হচ্ছে।
tmp->next->prev = tmp; //delete node এর পরের value এর previous এ আগের value রাখা হচ্ছে।
delete deleteNode; // node টা delete করে দেয়া হচ্ছে memory level থেকে। এতে address টা পরবর্তী যেকোনো value এর জন্য memory address টা available থাকবে।
}
//এই function এর মাধ্যমে tail node এর value delete করা হচ্ছে।
//parameter এ head node এবং tail node এর address নেয়া হচ্ছে।
void delete_tail(Node *&head, Node *&tail)
{
Node *deleteNode = tail; //as it is del node create করা হচ্ছে
tail = tail->prev; //tail এ তার previous node রাখা হচ্ছে
delete deleteNode; //এর পর del node delete করে দেয়া হচ্ছে
tail->next = NULL; এবং tail এর next এ NULL রাখা হচ্ছে। যাতে এটা list এর end value হয়।
}
// head থেকে value delete করার process টাও tail এর মতো খালি variable গুলো opposite হবে।
void delete_head(Node *&head, Node *&tail)
{
Node *deleteNode = head;
head = head->next;
delete deleteNode;
head->prev = NULL;
}