def test_remove_range(self): # Test case: middle case. head = Node(0) head.next = Node(1) head.next.next = Node(2) head.next.next.next = Node(3) head.next.next.next.next = Node(4) # Expect output: 0 4 self.assertEqual([0, 4], convert(remove_range(head, 1, 3))) # Test case: taking out the front node head = Node(0) head.next = Node(1) head.next.next = Node(2) head.next.next.next = Node(3) head.next.next.next.next = Node(4) # Expect output: 2 3 4 self.assertEqual([2, 3, 4], convert(remove_range(head, 0, 1))) # Test case: removing all the nodes head = Node(0) head.next = Node(1) head.next.next = Node(2) head.next.next.next = Node(3) head.next.next.next.next = Node(4) self.assertEqual([], convert(remove_range(head, 0, 7)))
""" Given a linked list, remove_range function accepts a starting and ending index as parameters and removes the elements at those indexes (inclusive) from the list For example: List: [8, 13, 17, 4, 9, 12, 98, 41, 7, 23, 0, 92] remove_range(list, 3, 8); List becomes: [8, 13, 17, 23, 0, 92] legal range of the list (0 < start index < end index < size of list). """ from algorithms.linkedlist import remove_range class Node(object): def __init__(self, x): self.val = x self.next = None def print_linked_list(head): string = "" while head.next: string += head.val + " -> " head = head.next string += head.val print(string) number1 = Node("8") number1.next = Node("13") number1.next.next = Node("17")