Heim > Artikel > Backend-Entwicklung > Suchen Sie nach Elementen in einer doppelt zirkulär verknüpften Liste in C++
Angesichts einer doppelt zirkulär verknüpften Liste und eines Schlüsselworts müssen wir die verknüpfte Liste nach dem Schlüsselwort durchsuchen und beim Finden eine entsprechende Meldung ausgeben. Angenommen, wir haben eine verknüpfte Liste mit einem bestimmten Zeichen und müssen darin nach einem Element suchen. Beginnen wir also mit der unten verlinkten Liste -
8 2 Wir verwenden 4 als Schlüssel, um die Lösung für das gegebene Problem zu finden. Doppelt verknüpfte Listen haben keinen festen Kopf, daher beginnen wir an einem beliebigen Knoten und markieren diesen Knoten als Kopf, bis wir erneut auf den Kopf stoßen, wo wir eine lineare Suche in der verknüpften Liste durchführen und nach dem Schlüsselwort suchen.
Schauen wir uns einige Eingabe- und Ausgabeszenarien an -Angenommen, wir haben eine bidirektionale verknüpfte Liste mit 5 Knoten 5 gefunden Es ist 6.
Input = <-> 3 <-> 4<-> 5<-> 6<-> 7<-> key=6 Output = Element found
Betrachten wir einen anderen Fall, in dem es in einer doppelt zirkulär verknüpften Liste kein zu durchsuchendes Element gibt.
Input = <-> 10<->20<->30<->40<->50<-> key=100 Output = Element not found
Algorithmus
Die chinesische Übersetzung von
#include <iostream> #include <vector> using namespace std; class Node { public: int val; Node *left, *right; Node(int val) { this->val = val; } }; bool solve(Node* root, int key) { Node* copy = root; do { if(copy->val == key) return true; copy = copy->right; }while(copy!=root); return false; } int main() { // assigning the forward node in each node of the linked list Node* phead = new Node(5); phead->right = new Node(8); phead->right->right = new Node(9); phead->right->right->right = new Node(2); phead->right->right->right->right = new Node(4); phead->right->right->right->right->right = phead; // assignment of the previous node in each node in the linked list // assigning the previous of the head to the last element phead->left = phead->right->right->right->right; // assigning the left node in each node of the linked list phead->right->left = phead; phead->right->right->left = phead->right; phead->right->right->right->left = phead->right->right; phead->right->right->right->right->left = phead->right->right->right; if(solve(phead, 4)) cout << "Element present"; else cout << "Element not present"; return 0; }
Ausgabe
Element presentDie chinesische Übersetzung von
Fazit
Das obige ist der detaillierte Inhalt vonSuchen Sie nach Elementen in einer doppelt zirkulär verknüpften Liste in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!