def test_append_multiple_with_initial_value(self):
        linked = SinglyLinkedList(1000)
        linked.append(100)
        linked.append(200)
        linked.append(300)

        self.assertEqual(linked.as_list(), [1000, 100, 200, 300])
    def test_remove(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.remove(1)

        self.assertEqual(linked.as_list(), [100, 300])
    def test_as_list(self):
        linked = SinglyLinkedList()
        linked.append(100)
        linked.append(200)
        linked.append(300)

        self.assertEqual(linked.as_list(), [100, 200, 300])
コード例 #4
0
ファイル: 2_3.py プロジェクト: nkashy1/intprep
class deleteFromMiddleTests(unittest.TestCase):
    def setUp(self):
        self.linked_list = SinglyLinkedList(SinglyLinkedNode(0))
        for i in range(3):
            self.linked_list.append(SinglyLinkedNode(i+1))

    def test_1(self):
        node = self.linked_list.head.child
        deleteFromMiddle(node)

        traversal = self.linked_list.traverse()
        self.assertEqual(len(traversal), 3)
        self.assertEqual(traversal, [0, 2, 3])

    def test_2(self):
        node = self.linked_list.head.child.child
        deleteFromMiddle(node)

        traversal = self.linked_list.traverse()
        self.assertEqual(len(traversal), 3)
        self.assertEqual(traversal, [0, 1, 3])

    def test_3(self):
        for _ in range(2):
            node = self.linked_list.head.child
            deleteFromMiddle(node)

        traversal = self.linked_list.traverse()
        self.assertEqual(len(traversal), 2)
        self.assertEqual(traversal, [0, 3])

    def test_4(self):
        node = self.linked_list.head.child.child.child
        self.assertRaises(ValueError, deleteFromMiddle, node)
コード例 #5
0
class deleteFromMiddleTests(unittest.TestCase):
    def setUp(self):
        self.linked_list = SinglyLinkedList(SinglyLinkedNode(0))
        for i in range(3):
            self.linked_list.append(SinglyLinkedNode(i + 1))

    def test_1(self):
        node = self.linked_list.head.child
        deleteFromMiddle(node)

        traversal = self.linked_list.traverse()
        self.assertEqual(len(traversal), 3)
        self.assertEqual(traversal, [0, 2, 3])

    def test_2(self):
        node = self.linked_list.head.child.child
        deleteFromMiddle(node)

        traversal = self.linked_list.traverse()
        self.assertEqual(len(traversal), 3)
        self.assertEqual(traversal, [0, 1, 3])

    def test_3(self):
        for _ in range(2):
            node = self.linked_list.head.child
            deleteFromMiddle(node)

        traversal = self.linked_list.traverse()
        self.assertEqual(len(traversal), 2)
        self.assertEqual(traversal, [0, 3])

    def test_4(self):
        node = self.linked_list.head.child.child.child
        self.assertRaises(ValueError, deleteFromMiddle, node)
    def test_insert_in_the_middle(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.insert(1000, 1)

        self.assertEqual(linked.as_list(), [100, 1000, 200, 300])
    def test_item_setting_by_index_overrides_previous_value_at_the_end(self):
        linked = SinglyLinkedList()
        linked.append(100)
        linked.append(200)
        linked.append(300)
        linked[2] = 400

        self.assertEqual(linked.as_list(), [100, 200, 400])
    def test_direct_access_to_elements_more_than_one_element(self):
        linked = SinglyLinkedList()
        linked.append(100)
        linked.append(200)
        linked.append(300)
        linked.append(400)

        self.assertEqual(linked[2], 300)
    def test_remove_at_the_beginning_with_multiple_values(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.append(400)
        linked.remove(0)

        self.assertEqual(linked.as_list(), [200, 300, 400])
    def test_remove_at_the_end(self):
        linked = SinglyLinkedList(100)
        linked.append(200)
        linked.append(300)
        linked.append(400)
        linked.append(500)
        linked.remove(4)

        self.assertEqual(linked.as_list(), [100, 200, 300, 400])
コード例 #11
0
class SetupSinglyLinkedList:
    def setup_method(self):
        self.test_list = SinglyLinkedList()

        self.test_list.append(42)
        self.test_list.append(33)
        self.test_list.append('spam')
        self.test_list.prepend([])
        self.test_list.prepend({'a': 42})
コード例 #12
0
ファイル: 2_4.py プロジェクト: nkashy1/intprep
    def test_2(self):
        linked_list = SinglyLinkedList()
        values = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
        for value in values:
            linked_list.append(SinglyLinkedNode(value))

        partition(linked_list, 10)

        traversal = linked_list.traverse()
        self.assertEqual(traversal, [9, 8, 7, 6, 5, 4, 3, 2, 1, 10])
コード例 #13
0
ファイル: 2_4.py プロジェクト: zomglings/intprep
    def test_2(self):
        linked_list = SinglyLinkedList()
        values = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
        for value in values:
            linked_list.append(SinglyLinkedNode(value))

        partition(linked_list, 10)

        traversal = linked_list.traverse()
        self.assertEqual(traversal, [9, 8, 7, 6, 5, 4, 3, 2, 1, 10])
コード例 #14
0
ファイル: 2_1.py プロジェクト: zomglings/intprep
    def test_problem(self):
        linked_list = SinglyLinkedList(SinglyLinkedNode(-1))
        for i in range(100):
            linked_list.append(SinglyLinkedNode(i))
            linked_list.append(SinglyLinkedNode(i))

        for i in range(100):
            linked_list.append(SinglyLinkedNode(0))

        deduplicate(linked_list)
        self.assertEqual(linked_list.traverse(), [-1] + range(100))
コード例 #15
0
ファイル: 2_4.py プロジェクト: zomglings/intprep
    def test_1(self):
        linked_list = SinglyLinkedList()
        values = [3, 5, 8, 5, 10, 2, 1]
        for value in values:
            linked_list.append(SinglyLinkedNode(value))

        partition(linked_list, 5)

        traversal = linked_list.traverse()
        self.assertEqual(set(traversal[:3]), set([1, 2, 3]))
        self.assertEqual(set(traversal[3:]), set([5, 8, 10]))
        self.assertEqual(len(traversal), 7)
コード例 #16
0
ファイル: 2_4.py プロジェクト: nkashy1/intprep
    def test_1(self):
        linked_list = SinglyLinkedList()
        values = [3, 5, 8, 5, 10, 2, 1]
        for value in values:
            linked_list.append(SinglyLinkedNode(value))

        partition(linked_list, 5)

        traversal = linked_list.traverse()
        self.assertEqual(set(traversal[:3]), set([1,2,3]))
        self.assertEqual(set(traversal[3:]), set([5, 8, 10]))
        self.assertEqual(len(traversal), 7)
コード例 #17
0
    def test_3(self):
        linked_list = SinglyLinkedList(SinglyLinkedNode(0))
        last = 100000
        current = last
        current_node = SinglyLinkedNode(current)
        while current > 0:
            current -= 1
            current_node = SinglyLinkedNode(current, current_node)
        linked_list.append(current_node)

        k = 7623

        self.assertEqual(toLast(k, linked_list), last - k)
コード例 #18
0
ファイル: 2_8.py プロジェクト: nkashy1/intprep
    def create_list(self, length_neck, length_loop):
        neck = SinglyLinkedList()
        for i in range(length_neck):
            neck.prepend(SinglyLinkedNode(length_neck - i))

        loop = SinglyLinkedList()
        for i in range(length_loop):
            loop.prepend(SinglyLinkedNode(length_neck + length_loop - i))

        if loop.head is not None:
            end = loop.head
            while end.child is not None:
                end = end.child
            end.child = loop.head

            neck.append(loop.head)
        return neck
コード例 #19
0
ファイル: 2_8.py プロジェクト: zomglings/intprep
    def create_list(self, length_neck, length_loop):
        neck = SinglyLinkedList()
        for i in range(length_neck):
            neck.prepend(SinglyLinkedNode(length_neck - i))

        loop = SinglyLinkedList()
        for i in range(length_loop):
            loop.prepend(SinglyLinkedNode(length_neck + length_loop - i))

        if loop.head is not None:
            end = loop.head
            while end.child is not None:
                end = end.child
            end.child = loop.head

            neck.append(loop.head)
        return neck
    def test_inequality_with_values(self):
        first = SinglyLinkedList()
        first.append(100)
        first.append(200)
        first.append(300)
        second = SinglyLinkedList()
        second.append(110)
        second.append(200)
        second.append(300)

        self.assertNotEqual(first, second)
コード例 #21
0
ファイル: 2_5.py プロジェクト: nkashy1/intprep
def sumLists(a, b):
    current_a = a.head
    current_b = b.head
    result = SinglyLinkedList()

    # Digit addition step
    while (current_a is not None) and (current_b is not None):
        result.append(SinglyLinkedNode(current_a.value + current_b.value))
        current_a = current_a.child
        current_b = current_b.child
    while current_a is not None:
        result.append(SinglyLinkedNode(current_a.value))
        current_a = current_a.child
    while current_b is not None:
        result.append(SinglyLinkedNode(current_b.value))
        current_b = current_b.child

    # Carries step
    current_result = result.head
    while current_result is not None:
        if current_result.value >= 10:
            carry = int(current_result.value/10)
            current_result.value = current_result.value - 10*carry
            if current_result.child is not None:
                current_result.child.value += carry
            else:
                current_result.child = SinglyLinkedNode(carry)

        current_result = current_result.child

    return result
コード例 #22
0
ファイル: 2_5.py プロジェクト: zomglings/intprep
def sumLists(a, b):
    current_a = a.head
    current_b = b.head
    result = SinglyLinkedList()

    # Digit addition step
    while (current_a is not None) and (current_b is not None):
        result.append(SinglyLinkedNode(current_a.value + current_b.value))
        current_a = current_a.child
        current_b = current_b.child
    while current_a is not None:
        result.append(SinglyLinkedNode(current_a.value))
        current_a = current_a.child
    while current_b is not None:
        result.append(SinglyLinkedNode(current_b.value))
        current_b = current_b.child

    # Carries step
    current_result = result.head
    while current_result is not None:
        if current_result.value >= 10:
            carry = int(current_result.value / 10)
            current_result.value = current_result.value - 10 * carry
            if current_result.child is not None:
                current_result.child.value += carry
            else:
                current_result.child = SinglyLinkedNode(carry)

        current_result = current_result.child

    return result
コード例 #23
0
class SinglyLinkedListQueue:
    def __init__(self, max_length):
        self._queue = SinglyLinkedList()
        self._length = 0
        self._max_length = max_length

    def enqueue(self, value):
        if self._length == self._max_length:
            raise ValueError("Overflow")
        self._length += 1
        self._queue.append(value)

    def dequeue(self):
        if self._length == 0:
            raise ValueError("Underflow")
        self._length -= 1
        return self._queue.remove(0).value

    def increase_max_length(self):
        self._max_length += 1

    def as_list(self):
        return self._queue.as_list()
コード例 #24
0
ファイル: benchmark.py プロジェクト: vinutah/sandbox
def time_append():
    n = 5000
    print('time_append,    n =', n)
    with timewith('  linked list  '):
        container = SLL()
        for x in range(n):
            container.append(x)
    del container
    with timewith('  list         '):
        container = list()
        for x in range(n):
            container.append(x)
    del container
    with timewith('  deque        '):
        container = deque()
        for x in range(n):
            container.append(x)
    del container
コード例 #25
0
    def test_2(self):
        linked_list = SinglyLinkedList(SinglyLinkedNode(-1))
        for i in range(100):
            linked_list.append(SinglyLinkedNode(i))

        self.assertIsNone(toLast(1000, linked_list))
コード例 #26
0
    def test_1(self):
        linked_list = SinglyLinkedList(SinglyLinkedNode(0))
        for i in range(1, 100):
            linked_list.append(SinglyLinkedNode(i))

        self.assertEqual(toLast(1, linked_list), 98)
    def test_append_single(self):
        linked = SinglyLinkedList()
        linked.append(100)

        self.assertEqual(linked.as_list(), [100])
    def test_direct_access_to_elements(self):
        linked = SinglyLinkedList()
        linked.append(100)

        self.assertEqual(linked[0], 100)
    def test_item_setting_by_index_with_a_previous_value(self):
        linked = SinglyLinkedList()
        linked.append(100)
        linked[1] = 200

        self.assertEqual(linked.as_list(), [100, 200])