Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แก้ไขตัวชี้สุ่มในรายการที่เชื่อมโยงเป็นทวีคูณใน C ++


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