Ejemplo n.º 1
0
def add_lists_reverse(list1, list2):
    """ add two lists in reverse order
    """

    p = list1.head
    q = list2.head

    carry = 0
    sum_list = LinkList()

    while p and q:
        curr_sum_digit = (p.data + q.data + carry) % 10
        carry = (p.data + q.data + carry) / 10
        sum_list.append_node(ListNode(curr_sum_digit))
        p = p.next
        q = q.next
    while q:
        curr_sum_digit = (q.data + carry) % 10
        carry = (q.data + carry) / 10
        sum_list.append_node(ListNode(curr_sum_digit))
        q = q.next
    while p:
        curr_sum_digit = (p.data + carry) % 10
        carry = (p.data + carry) / 10
        sum_list.append_node(ListNode(curr_sum_digit))
        p = p.next
    if carry == 1:
        sum_list.append_node(ListNode(1))

    return sum_list
Ejemplo n.º 2
0
def add_lists_reverse(list1, list2):
    ''' add two lists in reverse order
    '''

    p = list1.head
    q = list2.head

    carry = 0
    sum_list = LinkList()

    while p and q:
        curr_sum_digit = (p.data + q.data + carry) % 10
        carry = (p.data + q.data + carry) / 10
        sum_list.append_node(ListNode(curr_sum_digit))
        p = p.next
        q = q.next
    while q:
        curr_sum_digit = (q.data + carry) % 10
        carry = (q.data + carry) / 10
        sum_list.append_node(ListNode(curr_sum_digit))
        q = q.next
    while p:
        curr_sum_digit = (p.data + carry) % 10
        carry = (p.data + carry) / 10
        sum_list.append_node(ListNode(curr_sum_digit))
        p = p.next
    if carry == 1:
        sum_list.append_node(ListNode(1))

    return sum_list
Ejemplo n.º 3
0
def add_two_lists(list1, list2):
    sum_list = LinkList()
    p = list1.head
    q = list2.head
    carry = 0
    while p or q:
        first = p.data if p else 0
        second = q.data if q else 0
        sum = first + second + carry
        carry = sum / 10
        sum = sum % 10
        sum_list.append_node(ListNode(sum))
        if p:
            p = p.next
        if q:
            q = q.next
    if carry:
        sum_list.append_node(ListNode(carry))
    return sum_list
Ejemplo n.º 4
0
def add_two_lists(list1, list2):
    sum_list = LinkList()
    p = list1.head
    q = list2.head
    carry = 0
    while p or q:
        first = p.data if p else 0
        second = q.data if q else 0
        sum = first + second + carry
        carry = sum / 10
        sum = sum % 10
        sum_list.append_node(ListNode(sum))
        if p:
            p = p.next
        if q:
            q = q.next
    if carry:
        sum_list.append_node(ListNode(carry))
    return sum_list
Ejemplo n.º 5
0
def merge_lists(lists):
    ''' merge len(lists) sorted linked lists, and return the result linked list
    '''
    for each_list in lists:        
        each_list.append_node(ListNode(sys.maxint))
    min_heap = Heap()
    result_list = LinkList()
    curr_nodes = [each_list.head for each_list in lists]
    curr_datas = [node.data for node in curr_nodes]
    # build the heap according to curr_datas
    min_heap.build_heap('min', curr_datas)
    # min_heap.heap[0] == maxint means all the lists go to end, only then, stop the while loop
    while min_heap.heap[0] != sys.maxint:
        # extract min node
        curr_min = min_heap.extract_node()
        # append to result
        result_list.append_node(ListNode(curr_min))
        min_index = curr_datas.index(curr_min)
        curr_nodes[min_index] = curr_nodes[min_index].next
        curr_datas[min_index] = curr_nodes[min_index].data
        # insert the extracted node's next's data, and re-heapify
        min_heap.add_node(curr_datas[min_index])
    return result_list
def merge_two_lists_1(listA, listB):
    p = listA.head
    q = listB.head
    if not p:
        return listB
    if not q:
        return listA 
    result_list = LinkList()
    #tail = ListNode(0)
    #tail.next = result_list.head
    while p and q:
        if p.data < q.data:
            result_list.append_node(ListNode(p.data))
            p = p.next
        else:
            result_list.append_node(ListNode(q.data))
            q = q.next
        
    if p:
        result_list.append_node(p)
    if q:
        result_list.append_node(q)
    return result_list
Ejemplo n.º 7
0
def merge_two_lists_1(listA, listB):
    p = listA.head
    q = listB.head
    if not p:
        return listB
    if not q:
        return listA
    result_list = LinkList()
    #tail = ListNode(0)
    #tail.next = result_list.head
    while p and q:
        if p.data < q.data:
            result_list.append_node(ListNode(p.data))
            p = p.next
        else:
            result_list.append_node(ListNode(q.data))
            q = q.next

    if p:
        result_list.append_node(p)
    if q:
        result_list.append_node(q)
    return result_list