2017-07-26 4 views
0

Ich studiere Code anderer Leute, und ein Teil des Codes verwirrt mich sehr. Was bedeutet [1] in der remove(head)[1]? Was ist auch (head, head.next)[i+1 == n]? Könnte mir jemand helfen?Was bedeutet [1], wenn wir es am Ende einer Funktion und am Ende eines Tupels setzen?

Im Code ist head der Kopf einer verknüpften Liste, die von einer anderen Klasse namens ListNode stammt und zwei Funktionen enthält. Einer ist head.val, der den Wert von head zeigt. Ein anderes ist head.next, das das nächste Objekt in der verknüpften Liste aufruft. Hier ist n ein Int. Dieser Code versucht, den N-ten Knoten vom Ende der Liste zu entfernen und seinen Kopf zurückzugeben.

Zum Beispiel

Gegeben verketteten Liste: 1-> 2-> 3-> 4-> 5 ist und n = 2.

Nach dem zweiten Knoten von dem Ende entfernt wird, die verknüpfte Liste wird 1-> 2-> 3-> 5.

Es folgt der Code:

class Solution: 
    def removeNthFromEnd(self, head, n): 
     def remove(head): 
      if not head: 
       return 0, head 
      i, head.next = remove(head.next) 
      return i+1, (head, head.next)[i+1 == n] 
     return remove(head)[1] 
+0

Was macht es, wenn es nicht am Ende einer Funktion steht? Was bedeutet "i + 1 == n"? Was bedeutet "int (True)" oder "int (False)"? Wenn Sie all diese Fragen beantworten können, haben Sie Ihre Frage gelöst. –

+0

@AlexanderHuszagh Ich habe den Beitrag bearbeitet. Hoffe dieses Mal ist es klar. – Root

+2

Die Frage ist klar. Aber die Antwort ist auch klar. Und ich frage dich, damit du darüber nachdenken kannst, was der Code macht: Was macht '[]' zum Beispiel, wenn er auf einer Liste aufgerufen wird? Was macht "int (True)"? Wenn Sie das wissen, können Sie den Code verstehen. –

Antwort

1

Die Funktion kehrt Entfernen eines Tupels (eigentlich ein Paar) - erste Wert-Index und der zweite Wert das entfernte Element gibt. Versuchen Sie also, Ihre Frage Schritt für Schritt zu lösen. Ersetzen Sie den Aufruf der Funktion durch den zurückgegebenen Wert und sehen Sie, ob die eckigen Klammern jetzt sinnvoll sind.

Verwandte Themen