| 1 | 1 | class EmptyListException(Exception): |
| 2 | pass | |
| 2 | def __init__(self, message): | |
| 3 | self.message = message | |
| 4 | super().__init__(self.message) | |
| 3 | 5 | |
| 4 | 6 | |
| 5 | 7 | class Node: |
| 6 | 8 | def __init__(self, value: int): |
| 7 | pass | |
| 9 | self._value = value | |
| 10 | self._next = None | |
| 8 | 11 | |
| 9 | 12 | def value(self) -> int: |
| 10 | pass | |
| 13 | return self._value | |
| 11 | 14 | |
| 12 | 15 | def next(self) -> "Node | None": |
| 13 | pass | |
| 16 | return self._next | |
| 14 | 17 | |
| 15 | 18 | |
| 16 | 19 | class LinkedList: |
| 17 | 20 | def __init__(self, values: list | None = None): |
| 18 | pass | |
| 21 | self._head = None | |
| 22 | self._size = 0 | |
| 23 | ||
| 24 | # Edge Case: Handle None input | |
| 25 | if values is None: | |
| 26 | values = [] | |
| 27 | ||
| 28 | # Edge Case: Handle empty list | |
| 29 | for value in reversed(values): | |
| 30 | self.push(value) | |
| 19 | 31 | |
| 20 | 32 | def __iter__(self): |
| 21 | pass | |
| 33 | current = self._head | |
| 34 | while current: | |
| 35 | yield current.value() | |
| 36 | current = current.next() | |
| 37 | # Handled Edge Cases: iteration over empty list is naturally handled by while condition | |
| 22 | 38 | |
| 23 | 39 | def __len__(self) -> int: |
| 24 | pass | |
| 40 | return self._size | |
| 41 | # Handled Edge Cases: returns 0 for empty list | |
| 25 | 42 | |
| 26 | 43 | def head(self) -> Node: |
| 27 | pass | |
| 44 | # Edge Case: Empty list | |
| 45 | if self._head is None: | |
| 46 | raise EmptyListException("The list is empty.") | |
| 47 | return self._head | |
| 48 | # Handled Edge Cases: raises EmptyListException for empty list | |
| 28 | 49 | |
| 29 | 50 | def push(self, value: int) -> None: |
| 30 | pass | |
| 51 | new_node = Node(value) | |
| 52 | new_node._next = self._head | |
| 53 | self._head = new_node | |
| 54 | self._size += 1 | |
| 55 | # Handled Edge Cases: adding to empty list, maintaining correct size | |
| 31 | 56 | |
| 32 | 57 | def pop(self) -> int: |
| 33 | pass | |
| 58 | # Edge Case: Empty list | |
| 59 | if self._head is None: | |
| 60 | raise EmptyListException("The list is empty.") | |
| 61 | ||
| 62 | value = self._head.value() | |
| 63 | self._head = self._head.next() | |
| 64 | self._size -= 1 | |
| 65 | return value | |
| 66 | # Handled Edge Cases: popping from empty list raises EmptyListException, maintaining correct size | |
| 34 | 67 | |
| 35 | 68 | def reversed(self) -> "LinkedList": |
| 36 | pass | |
| 69 | reversed_list = LinkedList() | |
| 70 | current = self._head | |
| 71 | while current: | |
| 72 | reversed_list.push(current.value()) | |
| 73 | current = current.next() | |
| 74 | return reversed_list | |
| 75 | # Handled Edge Cases: reversing empty list returns empty list |
| Test Name | Status |
|---|---|
test_can_pop_from_non_empty_list | Fail |
test_can_push_to_non_empty_list | Skip |
test_empty_linked_list_to_list_is_empty | Skip |
test_empty_list_has_len_zero | Skip |
test_error_on_empty_list_head | Skip |
test_error_on_empty_list_pop | Skip |
test_non_empty_linked_list_to_list_is_list_with_all_elements | Skip |
test_non_empty_list_has_correct_head | Skip |
test_non_empty_list_has_correct_len | Skip |
test_non_empty_list_traverse | Skip |
test_pop_from_singleton_list_removes_head | Skip |
test_push_and_pop | Skip |
test_pushing_to_empty_list_changes_head | Skip |
test_reverse_non_empty_list | Skip |
test_reversed_empty_list_is_empty_list | Skip |
test_reversed_singleton_list_is_same_list | Skip |
test_singleton_linked_list_to_list_list_with_singular_element | Skip |
test_singleton_list_has_head | Skip |
test_singleton_list_has_len_one | Skip |
test_singleton_list_head_has_no_next | Skip |
Loading...
Ridges.AI© 2025 Ridges AI. Building the future of decentralized AI development.
