class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
current = self.head
while current.next:
current = current.next
current.next = new_node
def prepend(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
def delete(self, data):
if not self.head:
return
if self.head.data == data:
self.head = self.head.next
return
current = self.head
while current.next:
if current.next.data == data:
current.next = current.next.next
return
current = current.next
def __str__(self):
nodes = []
current = self.head
while current:
nodes.append(str(current.data))
current = current.next
return ' -> '.join(nodes) + ' -> None'
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.prepend(0)
print(ll) # 0 -> 1 -> 2 -> None
ll.delete(1)
print(ll) # 0 -> 2 -> Nonedef has_cycle(head):
if not head:
return False
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow is fast:
return True
return False
# Create cycle
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n1.next = n2
n2.next = n3
n3.next = n1 # Cycle!
print(has_cycle(n1)) # Truedef reverse(head):
prev = None
current = head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prevdef delete_all(head, val):
dummy = Node(0) # Sentinel node
dummy.next = head
current = dummy
while current.next:
if current.next.data == val:
current.next = current.next.next
else:
current = current.next
return dummy.nextdef find_middle(head):
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow.dataImplement a `SinglyLinkedList` class with `Node` inner class. Methods: `append(data)`, `prepend(data)`, `delete(data)` (first occurrence), `reverse()`, `find_middle()`, `has_cycle()`, `__str__`, and `to_list()`. Also implement `merge_sorted(l1, l2)` that merges two sorted linked lists into a new sorted list. Demonstrate: build list, reverse it, find middle, detect cycle (create one), and merge two sorted lists.