"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Beispiel für eine Python-Codelösung --2.8 Schleifenerkennung

"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Beispiel für eine Python-Codelösung --2.8 Schleifenerkennung

CHAP2. Verkettete Liste

  1. Doppelte Elemente entfernen
  2. Kth von hinten zurückgeben
  3. Elemente zwischen entfernen
  4. Geteilte Liste (https://qiita.com/YusukeEngineer/items/030ad252bd779bd479bf)
  5. Summe von zwei in der Liste dargestellten Zahlen
  6. Kommentar
  7. Knoten schneiden
  8. Schleifenerkennung

Beispiel für eine Python-Codelösung

python



from chap2_function import* 

def FindBeginning(head_node):
    
    slow = head_node
    fast = head_node

    while fast and fast.next:

        slow = slow.next
        fast = fast.next.next
        
        if slow == fast:
            break

    if fast == None or fast.next == None:
        return None

    slow = head_node

    while slow != fast:
        slow = slow.next
        fast = fast.next

    return fast


sll = SinglyLinkedList()

sll.append(1)
sll.append(2)
sll.append(3)
sll.append(4)
sll.append(5)

sll.printList(sll.head)

sll.insertNode(sll.head.next.next.next.next,sll.head.next.next)

print("sll[0]: ", sll.head.data)
print("sll[1]: ",sll.head.next.data)
print("sll[2]: ",sll.head.next.next.data)
print("sll[3]: ",sll.head.next.next.next.data)
print("sll[4]: ",sll.head.next.next.next.next.data)
print("sll[5]: ",sll.head.next.next.next.next.next.data)
print("sll[6]: ",sll.head.next.next.next.next.next.next.data)

print("Ausgabe: ",FindBeginning(sll.head).data)

Python-Funktionen (Knotenklasse, bidirektionale Listenklasse)

chap2_function.py


#Knotenklasse
class Node: 
  
    #Konstrukteur
    def __init__(self, data): 
        self.data = data 
        self.next = None
        self.prev = None
  
#Unidirektionale Listenklasse
class SinglyLinkedList: 
  
    #Konstrukteur
    def __init__(self): 
        self.head = None

    def insertNode(self, prev_node, new_node): 
  
        if prev_node is None: 
            print("the given previous node cannot be NULL")
            return 
        
        if new_node is None: 
            print("the given new node cannot be NULL")
            return 
  
        # prev_Macht den nächsten Knoten des vom Knoten angegebenen Knotens zu einem neuen Knoten
        prev_node.next = new_node 
  
  
    #Knoten vom letzten Knoten einfügen
    def append(self, new_data): 
  
        #Knotengenerierung
        new_node = Node(new_data) 
  
        #Keine Definition des nächsten Knotens des neuen Knotens
        new_node.next = None
  
        #Wenn kein Kopfknoten festgelegt ist (leere Liste), legen Sie einen neuen Knoten als Kopfknoten fest
        if self.head is None: 
            new_node.prev = None
            self.head = new_node 
            return 
  
        #Stellen Sie den endgültigen Knoten ein (Vorwärtsscannen)
        last = self.head 
        while(last.next is not None): 
            last = last.next
  
        #Legen Sie einen neuen Knoten als letzten Knoten fest
        last.next = new_node 
  
        return

    # This function prints contents of linked list 
    # starting from the given node 
    def printList(self, node): 

        last = None
  
        print("Unidirektionale Liste: \n") 

        print("Vorwärtsscannen")
        while(node is not None): 
            print(node.data,end="") 
            last = node 
            node = node.next
            if node:
                print(" -> ",end="")
            else:
                print("\n")
  


#Bidirektionale Listenklasse
class DoublyLinkedList: 
  
    #Konstrukteur
    def __init__(self): 
        self.head = None
  
    #Knoten vom ersten Knoten einfügen
    def push(self, new_data): 
  
        #Knotengenerierung
        new_node = Node(new_data) 
  
        #Machen Sie den nächsten Knoten des neuen Knotens zu dem, der an erster Stelle der Hauptknoten war
        new_node.next = self.head 
  
        #Obwohl es sich in erster Linie um einen Kopfknoten handelte, wird der vorherige Knoten in einen neuen Knoten geändert
        if self.head is not None: 
            self.head.prev = new_node 
  
        #Machen Sie den neuen Knoten zu einem Kopfknoten
        self.head = new_node 
  
    #Einfügen eines Knotens an einem Zwischenpunkt
    def insert(self, prev_node, new_data): 
  
        # prev_Geben Sie an, ob ein Knoten nach dem vom Knoten angegebenen Knoten eingefügt werden soll
        #Wenn Keine, beenden Sie die Funktion
        if prev_node is None: 
            print("the given previous node cannot be NULL")
            return 
  
        #Knotengenerierung
        new_node = Node(new_data) 
  
        #Zurück zum nächsten Knoten des neuen Knotens_Machen Sie es zum nächsten Knoten des vom Knoten angegebenen Knotens
        new_node.next = prev_node.next
  
        # prev_Macht den nächsten Knoten des vom Knoten angegebenen Knotens zu einem neuen Knoten
        prev_node.next = new_node 
  
        #Zurück zum vorherigen Knoten des neuen Knotens_Machen Sie es zum Knoten, der vom Knoten angegeben wird
        new_node.prev = prev_node 
  
        #Zurück zum nächsten Knoten des neuen Knotens_Ich habe es zum nächsten Knoten des in Knoten angegebenen Knotens gemacht, aber der vorherige Knoten dieses Knotens wird auch zu einem neuen Knoten gemacht
        if new_node.next is not None: 
            new_node.next.prev = new_node 

    def insertNode(self, prev_node, new_node): 
  
        # prev_Geben Sie an, ob ein Knoten nach dem vom Knoten angegebenen Knoten eingefügt werden soll
        #Wenn Keine, beenden Sie die Funktion
        if prev_node is None: 
            print("the given previous node cannot be NULL")
            return 
        
        if new_node is None: 
            print("the given new node cannot be NULL")
            return 
  
        # prev_Macht den nächsten Knoten des vom Knoten angegebenen Knotens zu einem neuen Knoten
        prev_node.next = new_node 
  
        #Zurück zum vorherigen Knoten des neuen Knotens_Machen Sie es zum Knoten, der vom Knoten angegeben wird
        new_node.prev = prev_node 
  
  
    #Knoten vom letzten Knoten einfügen
    def append(self, new_data): 
  
        #Knotengenerierung
        new_node = Node(new_data) 
  
        #Keine Definition des nächsten Knotens des neuen Knotens
        new_node.next = None
  
        #Wenn kein Kopfknoten festgelegt ist (leere Liste), legen Sie einen neuen Knoten als Kopfknoten fest
        if self.head is None: 
            new_node.prev = None
            self.head = new_node 
            return 
  
        #Stellen Sie den endgültigen Knoten ein (Vorwärtsscannen)
        last = self.head 
        while(last.next is not None): 
            last = last.next
  
        #Legen Sie einen neuen Knoten als letzten Knoten fest
        last.next = new_node 
  
        # 7.Machen Sie den vorherigen Knoten des neuen Knotens zum letzten Knoten an erster Stelle
        new_node.prev = last 
  
        return
  
    def delete(self,del_node):

        if self.head == None or del_node == None: 
            return 

        if self.head == del_node: 
            self.head = del_node.next

        if del_node.next != None: 
            del_node.next.prev = del_node.prev 

        if del_node.prev != None: 
            del_node.prev.next = del_node.next

    # This function prints contents of linked list 
    # starting from the given node 
    def printList(self, node): 

        last = None
  
        print("Bidirektionale Liste: \n") 

        print("Vorwärtsscannen")
        while(node is not None): 
            print(node.data,end="") 
            last = node 
            node = node.next
            if node:
                print(" -> ",end="")
            else:
                print("\n")
  
        print("Reverse Scannen")
        while(last is not None): 
            print(last.data,end="")
            last = last.prev 
            if last:
                print(" -> ",end="")
            else:
                print("\n")
  
if __name__ == '__main__':
    #Generieren Sie eine leere bidirektionale Liste
    # DLL: None
    dll = DoublyLinkedList() 
    # DLL: None -> 6(Kopf/letzte) -> None
    dll.append(6) 
    # DLL: None -> 7(Kopf) -> 6(letzte) -> None 
    dll.push(7) 
    # DLL: None -> 1(Kopf) -> 7 -> 6(letzte) -> None 
    dll.push(1) 
    # DLL: None -> 1(Kopf) -> 7 -> 6 -> 4(letzte) -> None 
    dll.append(4) 
    # DLL: None -> 1(Kopf) -> 7 -> 8 -> 6 -> 4(letzte) -> None 
    dll.insert(dll.head.next, 8) 
    # DLL: None -> 1(Kopf) -> 8 -> 6 -> 4(letzte) -> None 
    dll.delete(dll.head.next) 


    dll.printList(dll.head) 

    sll = SinglyLinkedList()

    sll.append(1)
    sll.append(8)
    sll.append(6)
    sll.append(4)

    sll.printList(sll.head)

Verweise

[1] GeeksforGeeks: Doubly Linked List | Set 1 (Introduction and Insertion) [2] GeeksforGeeks: Delete a node in a Doubly Linked List

Recommended Posts

"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Beispiel für eine Python-Codelösung --2.8 Schleifenerkennung
Beispiel für eine Python-Codelösung --1.6 Komprimierung von Zeichenketten
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --1.5 One-Shot-Konvertierung
Python-Code Lösungsbeispiel --1.7 Matrixrotation
"Buch, um die Programmierfähigkeit zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel - 1,8 "0" -Matrix
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Python-Code-Antwortbeispiel --3.1 Drei Stapel
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --- Elemente zwischen 2.3 entfernt
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --2.1 Entfernen Sie doppelte Elemente
"Buch, um die Programmierfähigkeit zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --1.3 URLify
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel - 2,6-mal
"Buch, um die Programmierfähigkeit zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --1.9 Drehung der Zeichenkette
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code Lösungsbeispiel --1.1 Doppelte Zeichenfolge
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Python-Code-Antwortbeispiel --2.5 Summe zweier in der Liste angezeigter Zahlen
"Buch, um Programmierkenntnisse zu trainieren, um in der Welt zu kämpfen" Python-Code-Antwortbeispiel --2.4 Aufteilen der Liste
Beispiel für die Beantwortung von Python-Code-Antworten --2.7 Schnittknoten
Beispiel für die Antwort auf den Python-Code --2.2 Geben Sie Kth von hinten zurück
"Ein Buch zum Trainieren von Programmierkenntnissen für den Kampf in der Welt" Python-Code-Antwortbeispiel --1.4 Satzfolge
Beispiel für die Antwort auf den Python-Code --1.2 Zählen Sie die Anzahl der gleichen Zeichen
Programmieren, um in der Welt zu kämpfen ~ 5-1
Programmierung, um in der Welt zu kämpfen ~ 5-5,5-6
Programmieren, um in der Welt zu kämpfen 5-3
Programmieren, um in der Welt zu kämpfen ~ 5-2
Programmierung für den Kampf in der Welt - Kapitel 4
[Kenchon-Buch zu Python] "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben! -Inhaltsverzeichnis-
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
[Kenchon-Buch zu Python] -Kapitel 3- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!
[Kenchon-Buch zu Python] -Kapitel 2- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!
[Kenchon-Buch zu Python] -Kapitel 4- "Trainieren Sie Ihre Fähigkeiten zur Problemlösung! Algorithmen und Datenstrukturen" Ich habe den veröffentlichten Code in Python umgeschrieben!
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Python-Programm von "Buch, das schwieriges Programmieren leicht lehrt"
Verwendung der Methode __call__ in der Python-Klasse
Ändern Sie das Standardausgabeziel in eine Datei in Python
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Führen Sie den Ausgabecode auf dem lokalen Webserver in Python als "A, gibt vor, B zu sein" aus
So bestimmen Sie die Existenz eines Selenelements in Python
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
So überprüfen Sie die Speichergröße einer Variablen in Python
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Im Python-Befehl zeigt Python auf Python3.8
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
Codebeispiel zum Abrufen von oauth_token und oauth_token_secret der Twitter-API in Python 2.7
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
Was für ein Buch ist der meistverkaufte "Python Crash Course" der Welt?
Python-Code zur Bestimmung der monatlichen Signale für Investitionen mit relativer Stärke
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ein Beispiel für die Antwort auf die Referenzfrage der Studiensitzung. Mit Python.
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 6 Verbessern Sie den Python-Code
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
Führen Sie den Python-Interpreter im Skript aus
Wie bekomme ich Stacktrace in Python?
Probieren Sie eine funktionale Programmierpipe in Python aus
Ruft die EDINET-Codeliste in Python ab
So zeigen Sie Hello World in Python an