Heim > Backend-Entwicklung > C++ > Kehren Sie eine doppelt verknüpfte Liste mit C++ um

Kehren Sie eine doppelt verknüpfte Liste mit C++ um

PHPz
Freigeben: 2023-08-30 23:41:07
nach vorne
527 Leute haben es durchsucht

Kehren Sie eine doppelt verknüpfte Liste mit C++ um

In diesem Artikel haben wir eine doppelt verkettete Liste und erklären die verschiedenen Möglichkeiten, eine doppelt verkettete Liste in C++ umzukehren. Zum Beispiel –

Input : {1, 2, 3, 4}
Output : {4, 3, 2, 1}
Nach dem Login kopieren

Normalerweise fällt mir eine Methode ein, aber wir werden zwei Methoden verwenden – die normale Methode und die unorthodoxe Methode.

Normale Methode

Bei dieser Methode gehen wir die Liste durch und kehren sie beim Durchgehen um.

Beispiel

#include <bits/stdc++.h>

using namespace std;

class Node {
   public:
   int data;
   Node *next;
   Node *prev;
};

void reverse(Node **head_ref) {
   auto temp = (*head_ref) -> next;
   (*head_ref) -> next = (*head_ref) -> prev;
   (*head_ref) -> prev = temp;
   if(temp != NULL) {
      (*head_ref) = (*head_ref) -> prev;
      reverse(head_ref);
   }
   else
      return;
}
void push(Node** head_ref, int new_data) {
   Node* new_node = new Node();
   new_node->data = new_data;

   new_node->prev = NULL;

   new_node->next = (*head_ref);
   if((*head_ref) != NULL)
      (*head_ref) -> prev = new_node ;

   (*head_ref) = new_node;
}
int main() {
   Node* head = NULL;
   push(&head, 6);
   push(&head, 4);
   push(&head, 8);
   push(&head, 9);
   auto node = head;
   cout << "Before\n" ;
   while(node != NULL) {
      cout << node->data << " ";
      node = node->next;
   }
   cout << "\n";
   reverse(&head);
   node = head;
   cout << "After\n";
   while(node != NULL) {
      cout << node->data << " ";
   node = node->next;
   }
   return 0;
}
Nach dem Login kopieren

Ausgabe

Before
9 8 4 6
After
6 4 8 9
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Ansatz erfordert O(N)Zeitkomplexität, was sehr gut ist, da diese Komplexität unter höheren Einschränkungen ausgeführt werden kann.

Unorthodoxe Methode

Wie der Name schon sagt, ist dies keine sehr häufige Methode, an die Benutzer denken, aber wir werden diese Methode ebenfalls untersuchen. Bei diesem Ansatz erstellen wir einen Stapel und schieben weiterhin Daten hinein, und bei Pop ändern wir seinen Wert.

Beispiel

#include <bits/stdc++.h>

using namespace std;

class Node {
   public:
   int data;
   Node *next;
   Node *prev;
};
void push(Node** head_ref, int new_data) {
   Node* new_node = new Node();
   new_node->data = new_data;

   new_node->prev = NULL;

   new_node->next = (*head_ref);
   if((*head_ref) != NULL)
      (*head_ref) -> prev = new_node ;

   (*head_ref) = new_node;
}
int main() {
   Node* head = NULL;
   push(&head, 6);
   push(&head, 4);
   push(&head, 8);
   push(&head, 9);
   auto node = head;
   cout >> "Before\n" ;
   while(node != NULL) {
      cout >> node->data >> " ";
      node = node->next;
   }
   cout >> "\n";
   stack<Node*> s;
   node = head;
   while(node) {
      head = node;
      s.push(node);
      node = node -> next;
   }
   while(!s.empty()) {
      auto x = s.top();
      auto temp = x -> prev;
      x -> prev = x -> next;
      x -> next = temp;
      s.pop();
   }
   node = head;
   cout << "After\n";
   while(node != NULL) {
      cout << node->data << " ";
   node = node->next;
   }
   return 0;
}
Nach dem Login kopieren

Ausgabe

Before
9 8 4 6
After
6 4 8 9
Nach dem Login kopieren
Nach dem Login kopieren

Erklärung des obigen Codes

Bei diesem Ansatz verwenden wir einen Stapel, füllen den Stapel, während wir die Liste durchlaufen, entfernen dann die Elemente vom Stapel und ändern ihre Werte, sodass die Liste Es ist das Gegenteil. O(N) ist die zeitliche Komplexität dieses Programms, die auch für höhere Einschränkungen gilt.

Fazit

In diesem Artikel haben wir das Problem gelöst, eine doppelt verkettete Liste mit oder ohne Stapel umzukehren. Die Zeitkomplexität beträgt O(N), wobei N die Größe der Liste ist. Wir haben auch ein C++-Programm zur Lösung dieses Problems und vollständige Methoden (normale und unorthodoxe) zur Lösung dieses Problems gelernt. Wir können das gleiche Programm in anderen Sprachen wie C, Java, Python und anderen schreiben. Wir hoffen, dass dieser Artikel für Sie hilfreich war.

Das obige ist der detaillierte Inhalt vonKehren Sie eine doppelt verknüpfte Liste mit C++ um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage