Tutorial 1 - 7 February 2025

This commit is contained in:
Marcus Vinicius de Carvalho 2025-02-07 00:08:53 +08:00
parent 8cf111ec7a
commit 60ad042acc
3 changed files with 344 additions and 0 deletions

View File

@ -0,0 +1,102 @@
class ListNode:
def __init__(self, item):
self.item = item
self.next = None
class LinkedList:
def __init__(self):
self.size = 0
self.head = None
def printList(self):
cur = self.head
if not cur:
print("Empty")
return
while cur:
print(cur.item, end=" ")
cur = cur.next
print()
def removeAllItems(self):
self.head = None
self.size = 0
def findNode(self, index):
if index < 0 or index >= self.size:
return None
cur = self.head
while index > 0:
cur = cur.next
index -= 1
return cur
def insertNode(self, index, value):
if index < 0 or index > self.size:
return -1
newNode = ListNode(value)
if index == 0: # Insert at the beginning
newNode.next = self.head
self.head = newNode
else:
prev = self.findNode(index - 1)
newNode.next = prev.next
prev.next = newNode
self.size += 1
return 0
def removeNode(self, index):
if index < 0 or index >= self.size:
return -1
if index == 0: # Remove the first node
self.head = self.head.next
else:
prev = self.findNode(index - 1)
prev.next = prev.next.next
self.size -= 1
return 0
def moveEvenItemsToBack(ll):
if ll.size < 2:
return
cur = ll.head
index = 0
for _ in range(ll.size):
if cur.item % 2 == 0:
even_value = cur.item
cur = cur.next
ll.removeNode(index)
ll.insertNode(ll.size, even_value)
else:
cur = cur.next
index += 1
if __name__ == "__main__":
ll = LinkedList()
while True:
print("1: Insert an integer to the linked list:")
print("2: Move all even integers to the back of the linked list:")
print("0: Quit:")
choice = int(input("Please input your choice (1/2/0): "))
if choice == 1:
value = int(input("Input an integer that you want to add to the linked list: "))
ll.insertNode(ll.size, value)
print("The resulting linked list is:")
ll.printList()
elif choice == 2:
moveEvenItemsToBack(ll)
print("The resulting linked list after moving even integers to the back is:")
ll.printList()
elif choice == 0:
ll.removeAllItems()
break
else:
print("Choice unknown;")

View File

@ -0,0 +1,119 @@
class ListNode:
def __init__(self, item):
self.item = item
self.next = None
class LinkedList:
def __init__(self):
self.size = 0
self.head = None
def printList(ll):
cur = ll.head
if cur is None:
print("Empty")
return
while cur is not None:
print(cur.item, end=" ")
cur = cur.next
print()
def findNode(ll, index):
if ll is None or index < 0 or index >= ll.size:
return None
temp = ll.head
while index > 0:
temp = temp.next
if temp is None:
return None
index -= 1
return temp
def insertNode(ll, index, value):
if ll is None or index < 0 or index > ll.size:
return -1
new_node = ListNode(value)
if index == 0: # Insert at the beginning
new_node.next = ll.head
ll.head = new_node
else:
pre = findNode(ll, index - 1)
if pre is None:
return -1
new_node.next = pre.next
pre.next = new_node
ll.size += 1
return 0
def removeNode(ll, index):
if ll is None or index < 0 or index >= ll.size:
return -1
if index == 0: # Remove the first node
ll.head = ll.head.next
else:
pre = findNode(ll, index - 1)
if pre is None or pre.next is None:
return -1
pre.next = pre.next.next
ll.size -= 1
return 0
def removeAllItems(ll):
ll.head = None
ll.size = 0
def moveMaxToFront(ll):
if ll.head is None or ll.head.next is None: # Empty list or single node
return -1
pre_max = None
max_node = ll.head
cur = ll.head
while cur.next is not None:
if cur.next.item > max_node.item:
pre_max = cur
max_node = cur.next
cur = cur.next
if pre_max is None: # Max node is already at the front
return 0
# Move the max node to the front
pre_max.next = max_node.next
max_node.next = ll.head
ll.head = max_node
return 0
if __name__ == "__main__":
ll = LinkedList()
while True:
print("1: Insert an integer to the linked list:")
print("2: Move the largest stored value to the front of the list:")
print("0: Quit:")
choice = int(input("Please input your choice (1/2/0): "))
if choice == 1:
value = int(input("Input an integer that you want to add to the linked list: "))
insertNode(ll, ll.size, value)
print("The resulting linked list is:")
printList(ll)
elif choice == 2:
moveMaxToFront(ll)
print("The resulting linked list after moving the largest stored value to the front of the list is:")
printList(ll)
elif choice == 0:
removeAllItems(ll)
break
else:
print("Choice unknown.")

View File

@ -0,0 +1,123 @@
class ListNode:
def __init__(self, item):
self.item = item
self.next = None
class LinkedList:
def __init__(self):
self.size = 0
self.head = None
# Function to remove duplicates from a sorted linked list
def remove_duplicates_sorted_ll(ll):
current = ll.head
if current is None:
return
while current.next is not None:
if current.item == current.next.item:
temp = current.next.next
current.next = temp
ll.size -= 1
else:
current = current.next
def print_list(ll):
current = ll.head
if current is None:
print("Empty")
return
while current is not None:
print(current.item, end=" ")
current = current.next
print()
def remove_all_items(ll):
current = ll.head
while current is not None:
temp = current.next
current = None
current = temp
ll.head = None
ll.size = 0
def find_node(ll, index):
if ll is None or index < 0 or index >= ll.size:
return None
temp = ll.head
while index > 0:
temp = temp.next
if temp is None:
return None
index -= 1
return temp
def insert_node(ll, index, value):
if ll is None or index < 0 or index > ll.size:
return -1
new_node = ListNode(value)
# If inserting at the head
if index == 0:
new_node.next = ll.head
ll.head = new_node
ll.size += 1
return 0
# Insert at other positions
prev_node = find_node(ll, index - 1)
if prev_node is not None:
new_node.next = prev_node.next
prev_node.next = new_node
ll.size += 1
return 0
return -1
def remove_node(ll, index):
if ll is None or index < 0 or index >= ll.size:
return -1
# Remove head node
if index == 0:
ll.head = ll.head.next
ll.size -= 1
return 0
# Remove other nodes
prev_node = find_node(ll, index - 1)
if prev_node is not None and prev_node.next is not None:
prev_node.next = prev_node.next.next
ll.size -= 1
return 0
return -1
if __name__ == "__main__":
ll = LinkedList()
while True:
print("1: Insert an integer to the linked list:")
print("2: Remove duplicates from a sorted linked list:")
print("0: Quit:")
choice = int(input("Please input your choice(1/2/0): "))
if choice == 1:
value = int(input("Input an integer that you want to add to the linked list: "))
insert_node(ll, ll.size, value)
print("The resulting linked list is: ")
print_list(ll)
elif choice == 2:
remove_duplicates_sorted_ll(ll)
print("The resulting linked list after removing duplicate values from the sorted linked list is: ")
print_list(ll)
elif choice == 0:
remove_all_items(ll)
break
else:
print("Choice unknown;")