Files
python/exercises/simple-linked-list/example.py
Nathan Parsons f53e2ef08b Implement checks for raising messages with exceptions (#1113)
* Implement checks for messages being raised with exceptions
(Fixes #1080)

* Add self.assertRaisesWithMessage method to relevant exercise tests
    - Uses self.assertRaisesRegex
    - Checks only for the presence of a message, not content
* Add meaningful messages to failing examples
* octal: Switch to using a context manager for exception tests

* Add note regarding error messages to the insert

* simple-linked-list: Move hints.md to correct location

* simple-cipher: Remove extra whitespace from lines

* collatz-conjecture: Update hints.md

* Regenerate README to include exceptions section
2017-12-12 12:11:43 -06:00

68 lines
1.4 KiB
Python

class Node(object):
def __init__(self, value):
self._value = value
self._next = None
def value(self):
return self._value
def next(self):
return self._next
class LinkedIterator(object):
def __init__(self, linked_list):
self.current = linked_list._head
def __iter__(self):
return self
def __next__(self):
if self.current is None:
raise StopIteration
value = self.current.value()
self.current = self.current.next()
return value
def next(self):
return self.__next__()
class LinkedList(object):
def __init__(self, values=[]):
self._head = None
self._len = 0
[self.push(v) for v in values]
def __iter__(self):
return LinkedIterator(self)
def __len__(self):
return self._len
def head(self):
if self._head is None:
raise EmptyListException("The list is empty")
return self._head
def push(self, value):
newNode = Node(value)
newNode._next = self._head
self._head = newNode
self._len += 1
def pop(self):
if self._head is None:
raise EmptyListException("The list is empty")
self._len -= 1
ret = self._head.value()
self._head = self._head.next()
return ret
def reversed(self):
return LinkedList(self)
class EmptyListException(Exception):
pass