C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の二重リンクリストのランダムポインタを修正する


このチュートリアルでは、二重にリンクされたリスト内のランダムポインタを修正するプログラムについて説明します。

このために、ランダムポインターを持つ1つのノードを持つ二重リンクリストが提供されます。私たちのタスクは、ポインタが指す必要のある要素、つまりその隣の要素を修正することです。

#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)

  1. C++で二重リンクリストのサイズを見つけるプログラム

    この問題では、二重にリンクされたリストが与えられます。私たちのタスクは、C++で二重リンクリストのサイズを見つけるプログラムを作成することです。 二重リンクリストは特殊なタイプのリンクリストであり、単一リンクリストと比較して、順方向と逆方向の両方の方法で簡単にナビゲーションできます。以下は、二重リンクリストの概念を理解するための重要な用語です。 リンク-リンクリストの各リンクには、要素と呼ばれるデータを格納できます。 次へ-リンクリストの各リンクには、次と呼ばれる次のリンクへのリンクが含まれています。 前-リンクリストの各リンクには、前と呼ばれる前のリンクへのリンクが含ま

  2. C++で二重にリンクされたリストを使用した優先キュー

    データと優先度は整数値として与えられ、タスクは与えられた優先度に従って二重にリンクされたリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先