এই টিউটোরিয়ালে, আমরা দ্বিগুণভাবে লিঙ্কযুক্ত তালিকায় এলোমেলো পয়েন্টার সংশোধন করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব।
এর জন্য আমাদের একটি র্যান্ডমপয়েন্টার সহ একটি নোড সহ একটি দ্বিগুণ লিঙ্কযুক্ত তালিকা সরবরাহ করা হবে। আমাদের কাজ হল সেই উপাদানটিকে সংশোধন করা যার দিকে পয়েন্টার নির্দেশ করবে অর্থাৎ এর পাশের উপাদানটি।
উদাহরণ
#include <bits/stdc++.h> using namespace std; //node structure for doubly linked list struct node { int data; node* next; node* prev; }; //new node creation node* newNode(int data){ node* temp = new node; temp->data = data; temp->next = temp->prev = NULL; return temp; } //correcting the random pointer void get_cpointer(node*& head){ if (!head) return; node* temp = head; if (head->next && head->next->prev != head) { head->next->prev = head; return; } //changing if the position is incorrect if (head->prev != NULL) { head->prev = NULL; return; } temp = temp->next; while (temp) { if (temp->next && temp->next->prev != temp) { temp->next->prev = temp; return; } else if (temp->prev && temp->prev->next != temp) { temp->prev->next = temp; return; } temp = temp->next; } } //printing the doubly linked list void printList(node* head) { node* temp = head; while (temp) { cout << temp->data << " ("; cout << (temp->prev ? temp->prev->data : -1)<< ") "; temp = temp->next; } cout << endl; } int main(){ node* head = newNode(1); head->next = newNode(2); head->next->prev = head; head->next->next = newNode(3); head->next->next->prev = head; head->next->next->next = newNode(4); head->next->next->next->prev = head->next->next; cout << "\nIncorrect Linked List: "; printList(head); get_cpointer(head); cout << "\nCorrected Linked List: "; printList(head); return 0; }
আউটপুট
Incorrect Linked List: 1 (-1) 2 (1) 3 (1) 4 (3) Corrected Linked List: 1 (-1) 2 (1) 3 (2) 4 (3)