হেড ডিলিট করা খুবই ইজি। আমরা শুরুতে হেডকে একটি ডিলিট নোড পয়েন্টারে রেখে দিব, কাজ শেষে ডিলিট করে দেওয়ার জন্য।
কোডঃ
Node *deleteNode = head;
#include <bits/stdc++.h>
using namespace std;
class Node
{
public:
int val;
Node *next;
Node(int val)
{
this->val = val;
this->next = NULL;
}
};
void print_linekd_list(Node *head)
{
Node *tmp = head;
while (tmp != NULL)
{
cout << tmp->val << " ";
tmp = tmp->next;
}
cout << endl;
}
int size(Node *head)
{
Node *tmp = head;
int count = 0;
while (tmp != NULL)
{
count++;
tmp = tmp->next;
}
return count;
}
void delete_node(Node *head, int pos)
{
Node *tmp = head;
for (int i = 1; i <= pos - 1; i++)
{
tmp = tmp->next;
}
Node *deleteNode = tmp->next; // 30
tmp->next = tmp->next->next;
delete deleteNode;
}
void delete_head(Node *&head)
{
Node *deleteNode = head; // শুরুতে হেডকে একটি ডিলিট নোড পয়েন্টারে রেখে দিব, কাজ শেষে ডিলিট করে দেওয়ার জন্য।
head = head->next; // হেড পয়েন্টারকে তার নেক্সটে নিয়ে যাব।
delete deleteNode; // তারপর হেড ডিলিট করে দিব।
}
int main()
{
Node *head = new Node(10);
Node *a = new Node(20);
Node *b = new Node(30);
Node *c = new Node(40);
Node *d = new Node(50);
head->next = a;
a->next = b;
b->next = c;
c->next = d;
print_linekd_list(head);
int pos;
cin >> pos;
if (pos >= size(head))
{
cout << "Invalid" << endl;
}
else if (pos == 0)
{
delete_head(head);
}
else
{
delete_node(head, pos);
}
print_linekd_list(head);
return 0;
}