৯-৩ঃ Doubly Linked List এর যেকোনো position এ value insert

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;
}

Last updated