Python - Erweiterte verknüpfte Liste

Wir haben bereits in einem früheren Kapitel eine verknüpfte Liste gesehen, in der es nur möglich ist, vorwärts zu reisen. In diesem Kapitel sehen wir eine andere Art von verknüpfter Liste, in der es möglich ist, sowohl vorwärts als auch rückwärts zu reisen. Eine solche verknüpfte Liste wird als doppelt verknüpfte Liste bezeichnet. Es folgen die Merkmale einer doppelt verknüpften Liste.

  • Die doppelt verknüpfte Liste enthält ein Verknüpfungselement mit den Namen first und last.
  • Jede Verbindung enthält ein Datenfeld und zwei Verbindungsfelder, die als next und prev bezeichnet werden.
  • Jeder Link wird über seinen nächsten Link mit seinem nächsten Link verknüpft.
  • Jeder Link ist über seinen vorherigen Link mit seinem vorherigen Link verknüpft.
  • Der letzte Link enthält einen Link als null, um das Ende der Liste zu markieren.

Doppelt verknüpfte Liste erstellen

Wir erstellen eine doppelt verknüpfte Liste mithilfe der Node-Klasse. Jetzt verwenden wir den gleichen Ansatz wie in der einfach verknüpften Liste, aber der Kopf und die nächsten Zeiger werden für die ordnungsgemäße Zuweisung verwendet, um zusätzlich zu den im Knoten vorhandenen Daten zwei Verknüpfungen in jedem der Knoten zu erstellen.

class Node:
   def __init__(self, data):
      self.data = data
      self.next = None
      self.prev = None

class doubly_linked_list:

   def __init__(self):
      self.head = None

# Adding data elements		
   def push(self, NewVal):
      NewNode = Node(NewVal)
      NewNode.next = self.head
      if self.head is not None:
         self.head.prev = NewNode
      self.head = NewNode

# Print the Doubly Linked list		
   def listprint(self, node):
      while (node is not None):
         print(node.data),
         last = node
         node = node.next

dllist = doubly_linked_list()
dllist.push(12)
dllist.push(8)
dllist.push(62)
dllist.listprint(dllist.head)

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

62 8 12

Einfügen in eine doppelt verknüpfte Liste

Hier erfahren Sie, wie Sie mit dem folgenden Programm einen Knoten in die Liste der doppelten Verknüpfungen einfügen. Das Programm verwendet ein Menthod namens insert, das den neuen Knoten an der dritten Position vom Kopf der doppelt verknüpften Liste einfügt.

# Create the Node class
class Node:
   def __init__(self, data):
      self.data = data
      self.next = None
      self.prev = None

# Create the doubly linked list
class doubly_linked_list:

   def __init__(self):
      self.head = None

# Define the push method to add elements		
   def push(self, NewVal):

      NewNode = Node(NewVal)
      NewNode.next = self.head
      if self.head is not None:
         self.head.prev = NewNode
      self.head = NewNode

# Define the insert method to insert the element		
   def insert(self, prev_node, NewVal):
      if prev_node is None:
         return
      NewNode = Node(NewVal)
      NewNode.next = prev_node.next
      prev_node.next = NewNode
      NewNode.prev = prev_node
      if NewNode.next is not None:
         NewNode.next.prev = NewNode

# Define the method to print the linked list 
   def listprint(self, node):
      while (node is not None):
         print(node.data),
         last = node
         node = node.next

dllist = doubly_linked_list()
dllist.push(12)
dllist.push(8)
dllist.push(62)
dllist.insert(dllist.head.next, 13)
dllist.listprint(dllist.head)

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

62  8  13  12

Anhängen an eine doppelt verknüpfte Liste

Durch Anhängen an eine doppelt verknüpfte Liste wird das Element am Ende hinzugefügt.

# Create the node class
class Node:
   def __init__(self, data):
      self.data = data
      self.next = None
      self.prev = None
# Create the doubly linked list class
class doubly_linked_list:

   def __init__(self):
      self.head = None

# Define the push method to add elements at the begining
   def push(self, NewVal):
      NewNode = Node(NewVal)
      NewNode.next = self.head
      if self.head is not None:
         self.head.prev = NewNode
      self.head = NewNode

# Define the append method to add elements at the end
   def append(self, NewVal):

      NewNode = Node(NewVal)
      NewNode.next = None
      if self.head is None:
         NewNode.prev = None
         self.head = NewNode
         return
      last = self.head
      while (last.next is not None):
         last = last.next
      last.next = NewNode
      NewNode.prev = last
      return

# Define the method to print
   def listprint(self, node):
      while (node is not None):
         print(node.data),
         last = node
         node = node.next

dllist = doubly_linked_list()
dllist.push(12)
dllist.append(9)
dllist.push(8)
dllist.push(62)
dllist.append(45)
dllist.listprint(dllist.head)

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

62 8 12 9 45

Bitte beachten Sie die Position der Elemente 9 und 45 für die Append-Operation.