leetcode2487. Knoten aus der verknüpften Liste entfernen

Artikelverzeichnis

Thema

Geben Sie den Kopfknoten einer verknüpften Liste an.

Entfernen Sie rechts jeden Knoten mit einem größeren Wert.

Gibt den Kopfknotenkopf der geänderten verknüpften Liste zurück.

Beispiel 1:
Fügen Sie hier eine Bildbeschreibung ein

Eingabe: head = [5,2,13,3,8]
Ausgabe: [13,8]
Erläuterung: Die Knoten, die entfernt werden müssen, sind 5, 2 und 3.

  • Knoten 13 liegt rechts von Knoten 5.
  • Knoten 13 liegt rechts von Knoten 2.
  • Knoten 8 liegt rechts von Knoten 3.
    Beispiel 2:

Eingabe: head = [1,1,1,1]
Ausgabe: [1,1,1,1]
Erläuterung: Der Wert jedes Knotens ist 1, es gibt also keine Knoten, die entfernt werden müssen.

Hinweis:

Die Anzahl der Knoten in der angegebenen Liste liegt im Bereich [1, 105]
1 <= Node.val <= 105

Problem: 2487. Knoten aus verknüpfter Liste entfernen

Ideen

Verwenden Sie einen monotonen Stapel, behalten Sie ein Array bei, das von links nach rechts monoton abnimmt, und weisen Sie den Knoten Werte zu.
Beim Erstellen eines monotonen Stapels behalten wir ein nicht zunehmendes Array bei
. Wenn wir feststellen, dass der nächste Knoten größer als der obere ist Wenn wir ein Element des Stapels sind, entfernen wir so lange das oberste Element des Stapels, bis der Stapel leer ist oder das oberste Element des Stapels größer als der nächste Knoten ist

Die Komplexität

Zeitkomplexität:

O ( n ) O(n)An ) _ _

Raumkomplexität:

Addition O ( n ) O(n)An ) _ _

Code

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
        stack = []
        index = head
        while index!=None:
            while stack!=[] and stack[-1]<index.val:
                stack.pop()
            stack.append(index.val)
            index = index.next

        index = head
        for i in range(len(stack)):
            index.val = stack[i]
            if i!=len(stack)-1:
                index = index.next
        if index!=None : index.next = None 
        return head

Supongo que te gusta

Origin blog.csdn.net/qq_51118755/article/details/135353497
Recomendado
Clasificación