Förstå implementering av länkade listor i Python

Datastrukturer spelar en nyckelroll i programmeringsvärlden. De hjälper oss att organisera vår data på ett sätt som kan användas effektivt.

I den här handledningen kommer vi att lära oss om den enkellänkade listan och den dubbellänkade listan.

En länkad lista är en linjär datastruktur. Den lagrar inte data i angränsande minnesplatser som arrayer. Och varje element i länkad kallas en nod och de är anslutna med hjälp av pekarna. Den första noden i den länkade listan kallas huvudet.

Storleken på den länkade listan är dynamisk. Så vi kan ha valfritt antal noder som vi vill om inte lagringen är tillgänglig i enheten.

Det finns två typer av länkade listor. Låt oss se den detaljerade handledningen om dem en efter en.

#1. Enkelt länkad lista

En enkellänkad lista innehåller en enda pekare kopplad till nästa nod i den länkade listan. Vi måste lagra data och pekare för varje nod i den länkade listan.

Den sista noden i den länkade listan innehåller null som nästa pekare för att representera slutet på den länkade listan.

Du kan se illustrationen av en länk nedan.

Nu har vi en fullständig förståelse för en enkellänkad lista. Låt oss se stegen för att implementera det i Python.

Implementering av en enda länkad lista

1. Det första steget är att skapa noden för den länkade listan.

Hur skapar man det?

I Python kan vi enkelt skapa noden med hjälp av klassen. Klassen innehåller data och en pekare för nästa nod.

Titta på koden för noden.

class Node:

	def __init__(self, data):
		## data of the node
		self.data = data

		## next pointer
		self.next = None

Vi kan skapa noden med vilken typ av data som helst med hjälp av ovanstående klass. Vi får se det om ett tag.

Nu har vi noden med oss. Därefter måste vi skapa en länkad lista med flera noder. Låt oss skapa en annan klass för en länkad lista.

2. Skapa en klass som heter LinkedList med huvudet initialiserat till None. Se koden nedan.

class LinkedList:

	def __init__(self):
		## initializing the head with None
		self.head = None

3. Vi har Node- och LinkedList-klasser med oss. Hur infogar vi en ny nod i den länkade listan? Ett enkelt svar kan vara att använda en metod i klassen LinkedList. Ja, det vore trevligt. Låt oss skriva en metod för att infoga en ny nod i den länkade listan.

För att infoga en ny nod i den länkade listan måste vi följa vissa steg.

Låt oss se dem.

  • Kontrollera om huvudet är tomt eller inte.
  • Om huvudet är tomt, tilldela sedan den nya noden till huvudet.
  • Om huvudet inte är tomt, hämta den sista noden i den länkade listan.
  • Tilldela den nya noden till den sista noden nästa pekare.

Låt oss se koden för att infoga en ny nod i den länkade listan.

class LinkedList:

	####

	def insert(self, new_node):
		## check whether the head is empty or not
		if self.head:
			## getting the last node
			last_node = self.head
			while last_node != None:
				last_node = last_node.next

			## assigning the new node to the next pointer of last node
			last_node.next = new_node

		else:
			## head is empty
			## assigning the node to head
			self.head = new_node

hurra! vi har slutfört metoden för att infoga en ny nod i den länkade listan. Hur kan vi komma åt noddata från den länkade listan?

För att komma åt data från den länkade listan måste vi iterera genom den länkade med nästa pekare som vi gör för att få den sista noden i insättningsmetoden. Låt oss skriva en metod i klassen LinkedList för att skriva ut alla noddata i den länkade listan.

4. Följ stegen nedan för att skriva ut alla noddata i den länkade listan.

  • Initiera en variabel med huvud.
  • Skriv en slinga som itererar tills vi når slutet av den länkade listan.
    • Skriv ut noddata.
    • Flytta nästa pekare

Låt oss se koden.

class LinkedList:

	####

	def display(self):
		## variable for iteration
		temp_node = self.head

		## iterating until we reach the end of the linked list
		while temp_node != None:
			## printing the node data
			print(temp_node.data, end='->')

			## moving to the next node
			temp_node = temp_node.next

		print('Null')

Puh! vi slutförde att skapa länken med nödvändiga metoder. Låt oss testa den länkade listan genom att instansiera den med lite data.

Vi kan skapa noden med Node(1)-kod. Låt oss se den fullständiga koden för den länkade listans implementering tillsammans med exempelanvändningen.

class Node:

	def __init__(self, data):
		## data of the node
		self.data = data

		## next pointer
		self.next = None

class LinkedList:

	def __init__(self):
		## initializing the head with None
		self.head = None

	def insert(self, new_node):
		## check whether the head is empty or not
		if self.head:
			## getting the last node
			last_node = self.head
			while last_node.next != None:
				last_node = last_node.next

			## assigning the new node to the next pointer of last node
			last_node.next = new_node

		else:
			## head is empty
			## assigning the node to head
			self.head = new_node

	def display(self):
		## variable for iteration
		temp_node = self.head

		## iterating until we reach the end of the linked list
		while temp_node != None:
			## printing the node data
			print(temp_node.data, end='->')

			## moving to the next node
			temp_node = temp_node.next

		print('Null')


if __name__ == '__main__':
	## instantiating the linked list
	linked_list = LinkedList()

	## inserting the data into the linked list
	linked_list.insert(Node(1))
	linked_list.insert(Node(2))
	linked_list.insert(Node(3))
	linked_list.insert(Node(4))
	linked_list.insert(Node(5))
	linked_list.insert(Node(6))
	linked_list.insert(Node(7))

	## printing the linked list
	linked_list.display()

Kör programmet ovan för att få följande resultat.

1->2->3->4->5->6->7->Null

Det var allt för den länkade listan. Nu vet du hur man implementerar en enkellänkad lista. Du kan enkelt implementera den dubbellänkade listan med kunskapen om den enkellänkade listan. Låt oss dyka in i nästa avsnitt av handledningen.

#2. Dubbelt länkad lista

En dubbellänkad lista innehåller två pekare kopplade till föregående nod och nästa nod i den länkade listan. Vi måste lagra data och två pekare för varje nod i den länkade listan.

Den föregående pekaren för den första noden är noll och nästa pekare för den sista noden är noll för att representera slutet av den länkade listan på båda sidor.

Du kan se illustrationen av en länk nedan.

Den dubbellänkade listan har också liknande steg som den enkellänkade listan i implementering. Att återigen förklara samma saker kommer att vara tråkigt för dig. Gå igenom koden i varje steg så förstår du den väldigt snabbt. Nu går vi.

Dubbelt länkad listimplementering

1. Skapa en nod för den dubbellänkade listan med föregående nodpekare, data och nästa nodpekare.

class Node:

	def __init__(self, data):
		## previous pointer
		self.prev = None

		## data of the node
		self.data = data

		## next pointer
		self.next = None

2. Dubbelt länkad listklass.

class LinkedList:

	def __init__(self):
		## initializing the head with None
		self.head = None

3. En metod för att infoga en ny nod i den dubbellänkade listan.

class LinkedList:

	####

	def insert(self, new_node):
		## check whether the head is empty or not
		if self.head:
			## getting the last node
			last_node = self.head
			while last_node.next != None:
				last_node = last_node.next

			## assigning the last node to the previous pointer of the new node
			new_node.prev = last_node

			## assigning the new node to the next pointer of last node
			last_node.next = new_node

4. En metod för att visa dubbellänkade listdata.

class LinkedList:

	####

	def display(self):

		## printing the data in normal order
		print("Normal Order: ", end='')

		temp_node = self.head
		while temp_node != None:
			print(temp_node.data, end=' ')
			temp_node = temp_node.next
		print()

		## printing the data in reverse order using previous pointer
		print("Reverse Order: ", end='')

		## getting the last node
		last_node = self.head
		while last_node.next != None:
			last_node = last_node.next

		temp_node = last_node
		while temp_node != None:
			print(temp_node.data, end=' ')
			temp_node = temp_node.prev
		print()

Vi har sett koden för den dubbellänkade listan. Och det finns ingen kod för användningen av den dubbellänkade listklassen. Det är till dig. Använd den dubbellänkade listklassen som liknar den enkellänkade listan. Ha kul 🙂

Slutsats

Du kan hitta många problem baserat på länkade listor. Men du måste känna till den grundläggande implementeringen av de länkade som du har lärt dig i den här handledningen. Hoppas du hade en bra tid att lära dig det nya konceptet.

Glad kodning 🙂