Skip to content

Instantly share code, notes, and snippets.

@vaclavcadek
Last active June 26, 2017 14:18
Show Gist options
  • Save vaclavcadek/f91d8f118de61bb1109ae748daae0020 to your computer and use it in GitHub Desktop.
Save vaclavcadek/f91d8f118de61bb1109ae748daae0020 to your computer and use it in GitHub Desktop.
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __next__(self):
return self.next
class LinkedList:
def __init__(self):
self.head = None
@property
def is_empty(self):
return self.head is None
def add(self, item):
if self.is_empty:
self.head = Node(item)
else:
current = self.head
while current.next:
current = current.next
current.next = Node(item)
def remove(self, item):
previous = None
for current in self:
if current.data == item:
previous.next = current.next
previous = current
def search(self, item):
for current in self:
if current.data == item:
return True
return False
def __iter__(self):
node = self.head
while node:
yield node
node = next(node)
def __getitem__(self, item):
current = self.head
for _ in range(item):
current = next(current)
return current.data
l = LinkedList()
assert l.is_empty
for i in range(10):
l.add(i)
l.remove(2)
l.remove(4)
l.remove(6)
assert l[5] == 8
assert not l.is_empty
for node in l:
print(node.data)
assert l.search(5)
assert not l.search(11)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment