def partition_linked_list_around(value, list_head): first_half, second_half = list(), list() current = list_head if current.data < value: first_half.append(current.data) else: second_half.append(current.data) while current.next is not None: current = current.next if current.data < value: first_half.append(current.data) else: second_half.append(current.data) return get_singly_linked_list_from_values(first_half + second_half)
def add_linked_list_numbers(head_num_one, head_num_two): numbers = list() for head in (head_num_one, head_num_two): current = head digits = list() while current.next is not None: digits.append(current.data) current = current.next digits.append(current.data) num = int(''.join(str(digit) for digit in reversed(digits))) numbers.append(num) number_sum_str = str(sum(numbers)) reversed_digits = [int(digit) for digit in list(reversed(number_sum_str))] return get_singly_linked_list_from_values(reversed_digits)
digits.append(current.data) current = current.next digits.append(current.data) num = int(''.join(str(digit) for digit in reversed(digits))) numbers.append(num) number_sum_str = str(sum(numbers)) reversed_digits = [int(digit) for digit in list(reversed(number_sum_str))] return get_singly_linked_list_from_values(reversed_digits) #------------------------------------------------------- num_1 = get_singly_linked_list_from_values([1,2,3]) num_2 = get_singly_linked_list_from_values([4,8,6]) desired_sum = get_singly_linked_list_from_values([5,0,0,1]) calculated_sum = add_linked_list_numbers(num_1, num_2) assert linked_lists_equal(desired_sum, calculated_sum) num_1 = get_singly_linked_list_from_values([1,1,1,0,1,7]) num_2 = get_singly_linked_list_from_values([2,3,4,0,9,4]) desired_sum = get_singly_linked_list_from_values([3,4,5,0,0,2,1]) calculated_sum = add_linked_list_numbers(num_1, num_2) assert linked_lists_equal(desired_sum, calculated_sum)
if node.next is not None: next_node = node.next node.data = next_node.data node.next = next_node.next else: node = None #------------------------------------------------------- for _ in range(100): vals = list(range(10)) random.shuffle(vals) head = get_singly_linked_list_from_values(vals) # pick a random node to remove # TODO: make this go up to 9, not 8, if I can # figure out a way remove the last node in a # singly linked list current = head for _ in range(random.randint(0,8)): current = current.next # remember the data we're about to remove, data_removed = current.data remove_this_node(current) # build list of remaining data in linked list ll_data = list()