Basics
Design
Medium2 solutions2 playgrounds
707. Design Linked List
Solutions:
Interactive Visualization
class SinglyLLNode:
def __init__(self, val: Any, next=None):
self.val = val
self.next = next
class MyLinkedList:
def __init__(self):
self.sentinel = SinglyLLNode(None, None)
self.len = 0
def get(self, index: int) -> int:
node = self.goToIndex(index)
return node.val if node else -1
def addAtHead(self, val: int) -> None:
new_node = SinglyLLNode(val)
new_node.next = self.sentinel.next
self.sentinel.next = new_node
self.len += 1
def addAtTail(self, val: int) -> None:
new_node = SinglyLLNode(val)
current_node = self.sentinel
while current_node.next:
current_node = current_node.next
current_node.next = new_node
self.len += 1
def addAtIndex(self, index: int, val: int) -> None:
prev_node = self.goToIndex(index - 1)
if prev_node:
new_node = SinglyLLNode(val)
new_node.next = prev_node.next
prev_node.next = new_node
self.len += 1
def goToIndex(self, index: int) -> Optional[SinglyLLNode]:
current_index = -1
current_node = self.sentinel
while current_node.next and current_index < index:
current_node = current_node.next
current_index += 1
if current_index == index:
return current_node
return None
def deleteAtIndex(self, index: int) -> None:
prev_node = self.goToIndex(index - 1)
if prev_node and prev_node.next:
prev_node.next = prev_node.next.next
self.len -= 1
Reusable Code
Basic
Count Linked List Nodes
def getLen(head):
length = 0
while head:
head = head.next
length += 1
return length
Easy
Print the Elements of a Linked List
def print_ll(head, attr_name="val"):
while head:
value = getattr(head, attr_name, None)
print(value, end=" -> " if head.next else "\n")
head = head.next