Computer >> Máy Tính >  >> Lập trình >> C ++

Sửa con trỏ ngẫu nhiên trong danh sách được liên kết kép trong C ++

Trong hướng dẫn này, chúng ta sẽ thảo luận về một chương trình để sửa con trỏ ngẫu nhiên trong danh sách được liên kết chặt chẽ.

Đối với điều này, chúng tôi sẽ được cung cấp một danh sách được liên kết kép với một nút có một randompointer. Nhiệm vụ của chúng ta là chỉnh sửa phần tử mà con trỏ sẽ trỏ đến i. Phần tử bên cạnh nó.

Ví dụ

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

Đầu ra

Incorrect Linked List: 1 (-1) 2 (1) 3 (1) 4 (3)
Corrected Linked List: 1 (-1) 2 (1) 3 (2) 4 (3)