Doubly Linked List এ value insert করার কাজ টা আমরা একটা code এর মাধ্যমে বুঝার চেষ্টা করবো। তার আগে একটু আঁকাআঁকি করে বুঝে নেই।
Step 1: new node নেয়া হচ্ছে
Step 2: New Node কে 2nd position এর পর add করা হচ্ছে। অর্থাৎ 3rd position এ।
এবার এই insert operation এর সাথে সম্পর্কিত Code দেখে বুঝা যাক :
// এই function এর মাধ্যমে head এবং tail ছাড়া যেকোনো অন্য position এ value রাখা যাবে। এখানে head, position আর value parameter হিসেবে নেয়া হচ্ছে।
void insert_at_position(Node *head, int pos, int val)
{
Node *newNode = new Node(val); // given value দিয়ে একটা new node create করা হচ্ছে।
Node *tmp = head; // temporary একটা node এ head রাখা হচ্ছে যাতে loop চালিয়া traverse করা যায়
for (int i = 1; i <= pos - 1; i++) //position অব্দি loop চালিয়ে reach করা হচ্ছে।
{
tmp = tmp->next;
}
// এখানে tmp node এর next এ এবং next node এর previous এ new nodeকে রাখা হচ্ছে।
newNode->next = tmp->next; // tmp এর next কে new এর next এ রাখা হচ্ছে।
tmp->next = newNode; // tmp এর next এ newnode কে রাখা হচ্ছে।
newNode->next->prev = newNode; // new এর next এ যে value আছে তার previous এ newnode কে রাখা হচ্ছে। যাতে dual connection হয়।
newNode->prev = tmp; // newnode এর previous এর tmp node রাখা হচ্ছে।
}
//এখানে linked list এর size calculate করা হচ্ছে।
int size(Node *head)
{
Node *tmp = head;
int cnt = 0;
while (tmp != NULL) //NULL অব্দি loop চালানো হচ্ছে এর মধ্যে প্রতিবার cnt++ করা হচ্ছে।
{
cnt++;
tmp = tmp->next;
}
return cnt; //finally যত value cnt এ calculate করা হচ্ছে তা return করা হচ্ছে।
}
int main()
{
Node *head = new Node(10);
Node *a = new Node(20);
Node *b = new Node(30);
Node *c = new Node(40);
Node *tail = c;
// connection
head->next = a;
a->prev = head;
a->next = b;
b->prev = a;
b->next = c;
c->prev = b;
int pos, val;
cin >> pos >> val;
if (pos > size(head)) //given position যদি size থেকে বড় হয় তাহলে value insert করা impossible
{
cout << "Invalid" << endl;
}
else
{
insert_at_position(head, pos, val);
}
print_normal(head);
print_reverse(tail);
return 0;
}