Inhaltsverzeichnis
Duplikate aus der sortierten verknüpften Liste entfernen
Algorithmus
Beispiel
Ausgabe
Fazit
Heim Backend-Entwicklung C++ Entfernen Sie Duplikate mithilfe der Rekursion aus einer sortierten verknüpften Liste

Entfernen Sie Duplikate mithilfe der Rekursion aus einer sortierten verknüpften Liste

Sep 01, 2023 pm 01:45 PM
链表 重复项 递归 删除 已排序

Entfernen Sie Duplikate mithilfe der Rekursion aus einer sortierten verknüpften Liste

Eine verknüpfte Liste ist eine Folge von miteinander verbundenen Elementen. Jede Liste verfügt über einen Header und eine Folge von Knoten, von denen jeder Daten für den aktuellen Knoten enthält und mit dem nächsten Knoten verknüpft ist. Die Grundoperationen verknüpfter Listen sind Einfügen, Löschen, Suchen und Löschen.

Duplikate aus der sortierten verknüpften Liste entfernen

Eine Möglichkeit, Knoten zu löschen, ist die Verwendung der Rekursion. Die Idee besteht darin, jeden Knoten mit seinen Nachbarknoten zu vergleichen und doppelte Knoten zu entfernen, wenn sie gleich sind.

Unser rekursiver Aufruf kehrt zum nächsten Knoten zurück. Für das nächste Element rufen wir also die rekursive Funktion wie current_node->next = our_function(node->next) auf.

Wir vertrauen unserer Rekursion und current_node->next enthält jetzt die verknüpfte Liste ohne doppelte Elemente.

In der Hauptmethode bieten wir von Grund auf auf die Liste -

Node* head = new Node(5);
head->next = new Node(5);
head->next->next = new Node(6);
head->next->next->next = new Node(7);
head->next->next->next->next = new Node(7);
head->next->next->next->next->next = new Node(7); 
Nach dem Login kopieren

Algorithmus

Der Prozess der Verwendung der Rekursion zum Entfernen von Duplikaten aus einer sortierten verknüpften Liste ist wie folgt.

  • Schritt 1 – Erstellen Sie eine verknüpfte Liste mit allen Werten in der richtigen Reihenfolge

  • Schritt 2 – Wenn die verknüpfte Liste nicht existiert, wird das Programm beendet.

  • Schritt 3 – Wenn die verknüpfte Liste vorhanden ist, vergleichen Sie den nächsten Wert des Kopfknotens mit dem Wert im Kopfknoten. Wenn beide Werte gleich sind, entfernen Sie die Kopfzeile.

  • Schritt 4Schritt 3 wird rekursiv ausgeführt, jeden Knoten als Kopf behandeln, bis die Liste alle doppelten Werte aus sich selbst entfernt.

  • Schritt 5 – Die erhaltene Ausgabe ist eine sortierte verknüpfte Liste mit verschiedenen Werten

Beispiel

Zum Beispiel haben wir eine sortierte verknüpfte Liste mit den folgenden Werten -

1->1->1->2->3->3->4

Sehen wir uns ein C++-Programm an, das Duplikate mithilfe der Rekursion aus der oben sortierten verknüpften Liste entfernt -

#include <iostream>
using namespace std;
class Node {
   public:
   int data;
   Node* next;
   Node(int data) {
   this->data = data;
   next = NULL;
   }
};
Node* solve(Node* head) {
   if (head == NULL)
   return NULL;
   head->next = solve(head->next);
   if (head->next != NULL && head->next->data == head->data) {
      Node* temp = head->next;
      delete head;
      return temp;
   }
   return head;
}
void printList(Node* node) {
   while (node != NULL) {
      cout << node->data << (node->next == NULL ? "" : "->");
      node = node->next;
   }
}
int main() {
   Node* head = new Node(1);
   head->next = new Node(1);
   head->next->next = new Node(1);
   head->next->next->next = new Node(2);
   head->next->next->next->next = new Node(3);
   head->next->next->next->next->next = new Node(3);
   head->next->next->next->next->next->next = new Node(4);
   cout << "Linked list before: ";
   printList(head);
   head = solve(head);
   cout << "\nLinked list after: ";
   printList(head);
   return 0;
}
Nach dem Login kopieren

Danach prüfen wir, ob der aktuelle Knoten in der verknüpften Liste enthalten ist. Wenn die zufriedenstellende verknüpfte Liste, die wir vom aktuellen Knoten -> nächsten Knoten erhalten, denselben Wert wie dieser Knoten hat, schließen wir diesen Knoten nicht ein, andernfalls schließen wir ihn ein.

HINWEIS – Wenn der aktuelle Knoten NULL ist, geben wir die Grundbedingung der Rekursion zurück.

Ausgabe

Linked list before: 1->1->1->2->3->3->4
Linked list after: 1->2->3->4
Nach dem Login kopieren

Fazit

Wie wir beim rekursiven Aufruf gesehen haben, vertrauen wir darauf, dass der nächste Aufruf das erwartete Ergebnis des restlichen Problems erzielen wird. Wir haben gerade das aktuelle Teilproblem gelöst. Vor diesem Hintergrund prüfen wir, ob das aktuelle Element enthalten sein kann, und übergeben den Rest der verknüpften Liste an unseren rekursiven Aufruf, wobei wir darauf vertrauen, dass er uns von diesem Zeitpunkt an eine gültige verknüpfte Liste liefert. Wenn wir die gesamte verknüpfte Liste durchlaufen, beträgt die zeitliche Komplexität unserer Methode O(n).

Das obige ist der detaillierte Inhalt vonEntfernen Sie Duplikate mithilfe der Rekursion aus einer sortierten verknüpften Liste. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Apr 23, 2024 am 09:30 AM

Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe?

Stimmt es, dass Sie auf WeChat blockiert und gelöscht werden können und dauerhaft nicht hinzugefügt werden können? Stimmt es, dass Sie auf WeChat blockiert und gelöscht werden können und dauerhaft nicht hinzugefügt werden können? Apr 08, 2024 am 11:41 AM

Stimmt es, dass Sie auf WeChat blockiert und gelöscht werden können und dauerhaft nicht hinzugefügt werden können?

Unterstützen C++-Lambda-Ausdrücke die Rekursion? Unterstützen C++-Lambda-Ausdrücke die Rekursion? Apr 17, 2024 pm 09:06 PM

Unterstützen C++-Lambda-Ausdrücke die Rekursion?

So löschen Sie den TikTok-Chatverlauf vollständig So löschen Sie den TikTok-Chatverlauf vollständig May 07, 2024 am 11:14 AM

So löschen Sie den TikTok-Chatverlauf vollständig

PHP-Praxistipp: Entfernen Sie das letzte Semikolon in Ihrem Code PHP-Praxistipp: Entfernen Sie das letzte Semikolon in Ihrem Code Mar 27, 2024 pm 02:24 PM

PHP-Praxistipp: Entfernen Sie das letzte Semikolon in Ihrem Code

Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Apr 22, 2024 pm 03:18 PM

Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen?

Fortgeschrittenes Tutorial zur Go-Sprache: Ausführliche Untersuchung der Operationen zum Löschen von Zeichenfolgen Fortgeschrittenes Tutorial zur Go-Sprache: Ausführliche Untersuchung der Operationen zum Löschen von Zeichenfolgen Mar 27, 2024 pm 04:24 PM

Fortgeschrittenes Tutorial zur Go-Sprache: Ausführliche Untersuchung der Operationen zum Löschen von Zeichenfolgen

Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Apr 30, 2024 am 10:30 AM

Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung

See all articles