Heim >Backend-Entwicklung >PHP-Tutorial >Knoten aus der im Array vorhandenen verknüpften Liste löschen
3217. Knoten aus der im Array vorhandenen verknüpften Liste löschen
Schwierigkeit:Mittel
Themen: Array, Hash-Tabelle, verknüpfte Liste
Sie erhalten ein Array von Ganzzahlen und den Kopf einer verknüpften Liste. Gibt den Kopf der geänderten verknüpften Liste zurück, nachdem alle Knoten aus der verknüpften Liste entfernt wurden, deren Wert in Nums vorhanden ist.
Beispiel 1:
Beispiel 2:
Beispiel 3:
Einschränkungen:
Hinweis:
Lösung:
Wir müssen die verknüpfte Liste durchlaufen und alle Knoten entfernen, die einen Wert im Array nums haben.
Lassen Sie uns diese Lösung in PHP implementieren: 3217. Knoten aus der im Array vorhandenen verknüpften Liste löschen
val = $val; $this->next = $next; } } class Solution { /** * @param Integer[] $nums * @param ListNode $head * @return ListNode */ function removeElements($head, $nums) { ... ... ... /** * go to ./solution.php */ } } // Example usage: // Linked List: 1 -> 2 -> 3 -> 4 -> 5 $head = new ListNode(1); $head->next = new ListNode(2); $head->next->next = new ListNode(3); $head->next->next->next = new ListNode(4); $head->next->next->next->next = new ListNode(5); // Array nums: [1, 2, 3] $nums = [1, 2, 3]; $solution = new Solution(); $result = $solution->removeElements($head, $nums); // Function to print the linked list function printList($node) { while ($node !== null) { echo $node->val . " "; $node = $node->next; } } // Print the resulting linked list printList($result); // Output: 4 5 ?>Erläuterung:
removeElements($head, $nums):
- Wir konvertieren Zahlen zunächst in einen Hash-Satz ($numSet = array_flip($nums);) für schnelle Suchvorgänge.
- Ein Dummy-Knoten wird erstellt und mit dem Kopf der Liste verknüpft. Dies trägt dazu bei, Randfälle wie das Entfernen des Kopfknotens zu vereinfachen.
- Der vorherige Zeiger verfolgt den Knoten vor dem aktuellen, sodass wir den aktuellen Knoten entfernen können, indem wir ihn in der Liste überspringen.
- Für jeden Knoten prüfen wir, ob sein Wert in numSet enthalten ist. Wenn dies der Fall ist, entfernen wir ihn, indem wir den Zeiger prev->next anpassen, um den aktuellen Knoten zu überspringen.
Edge Cases:
- Wenn der Kopfknoten entfernt werden muss, stellt der Dummy-Knoten sicher, dass der Kopf sauber entfernt werden kann und trotzdem die richtige Liste zurückgegeben wird.
- Behandelt Fälle, in denen mehrere aufeinanderfolgende Knoten entfernt werden müssen.
Komplexität:
- Zeitkomplexität: O(n), wobei n die Anzahl der Knoten in der verknüpften Liste ist. Wir besuchen jeden Knoten einmal. Um Zahlen in eine Menge umzuwandeln, werden O(m) benötigt, wobei m die Größe von Zahlen ist.
- Raumkomplexität: O(m) zum Speichern des Zahlensatzes.
Beispielhafte Vorgehensweise:
Für die Eingabe nums = [1, 2, 3] und head = [1, 2, 3, 4, 5] wird der Algorithmus:
Die resultierende verknüpfte Liste ist [4, 5].
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonKnoten aus der im Array vorhandenen verknüpften Liste löschen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!