Files
WGU_Truck_Delivery/MyLinkedList.py
T
derek.holloway 2301ac357e init commit
2026-01-13 16:03:37 -08:00

59 lines
3.0 KiB
Python

# This is the node definition. Allowing each 'chain link' to hold data and point to the next
class DerekLinkedListNode:
def __init__(self, key, item) -> None:
self.key = key
self.data = item
self.next: DerekLinkedListNode | None = None
# This is the real meat of the linked list
class DerekLinkedList:
# On init point to the first node and hold the total length
def __init__(self) -> None:
self.head: DerekLinkedListNode | None = None
self.len: int = 0
def __iter__(self):
current = self.head # Set the head of the linked list
while current: # if the value exists
yield current.data # return the data
current = current.next # set the next link
# Appends an item to the end of the list
def append(self, key, item) -> None:
self.len += 1 # update the overall length
newNode = DerekLinkedListNode(key, item) # create the node to insert
if not self.head: # if the head doesnt exist
self.head = newNode # set the head as the node and return
return
cur = self.head # if the head exists set cur to the next node
while cur.next: # loop through the rest of the chain looking for the end
cur = cur.next
cur.next = newNode # add the new node to the end
# Removes an item at the index
def remove(self, key) -> None:
lastNode = self.head # previous node
curNode = self.head # current node
while key != curNode.key: # get to the node we are curious about
lastNode = curNode
if curNode.next == None:
return None
curNode = curNode.next
if curNode == self.head:
self.head = curNode.next
else:
lastNode.next = curNode.next # pull the current node out of the linked list
self.len -= 1 # remove the length by 1
# returns the data at the index
def get(self, key):
if self.head: # if the head exists
cur: DerekLinkedListNode | None = self.head # set the current searching for at the head
while key != cur.key: # go through the chain until we hit the index were looking for
if cur.next == None:
return
cur = cur.next
if isinstance(cur, DerekLinkedListNode): # since we made it here the data were on is a LinkedListNode
return cur.data # return the value out of the node
else:
return None