ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อแก้ไขตัวชี้แบบสุ่มในรายการที่เชื่อมโยง adoubly
สำหรับสิ่งนี้ เราจะได้รับรายการที่เชื่อมโยงแบบทวีคูณโดยมีหนึ่งโหนดที่มีตัวชี้สุ่ม งานของเราคือแก้ไของค์ประกอบที่ตัวชี้ควรชี้ไปที่องค์ประกอบที่อยู่ถัดจากองค์ประกอบนั้น
ตัวอย่าง
#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)