Example #1
0
# 将两个链表相乘,返回一个新链表
def multiplyLinkedList(the_list1: LinkedList, the_list2: LinkedList) -> LinkedList:
    if the_list1.length() < the_list2.length():
        my_list1 = the_list2
        my_list2 = getFragment(the_list1, 0, the_list1.length() - 1)
    else:
        my_list1 = the_list1
        my_list2 = getFragment(the_list2, 0, the_list2.length() - 1)
    node_pointer2 = my_list2.head_node
    result = _multiplyWithSingleDigit(my_list1, node_pointer2.getData())
    index = 0
    while node_pointer2.getNextNode():
        node_pointer2 = node_pointer2.getNextNode()
        index += 1
        temp = _multiplyWithSingleDigit(my_list1, node_pointer2.getData())
        for i in range(0, index):
            temp.app_start(Node(0))
        result = plusLinkedList(result, temp)
    return result


if __name__ == "__main__":
    list1 = initializeLinkedList(6)
    print(list1)
    print("*")
    list2 = initializeLinkedList(7)
    print(list2)
    print("=")
    print(multiplyLinkedList(list1, list2))
    pass
Example #2
0
        return my_linked_list
    mid = length // 2
    cut1 = mergeSort(getFragment(my_linked_list, 0, mid - 1))
    cut2 = mergeSort(
        getFragment(my_linked_list, mid,
                    my_linked_list.length() - 1))
    node_pointer1 = cut1.head_node
    node_pointer2 = cut2.head_node
    cut3 = LinkedList()
    while node_pointer1 is not None and node_pointer2 is not None:
        data1 = node_pointer1.getData()
        data2 = node_pointer2.getData()
        if data1 < data2:
            cut3.app_end(cut1.pop(cut1.getIndex(node_pointer1)))
            node_pointer1 = cut1.head_node
        else:
            cut3.app_end(cut2.pop(cut2.getIndex(node_pointer2)))
            node_pointer2 = cut2.head_node
    combineList(cut3, cut1)
    combineList(cut3, cut2)
    return cut3


if __name__ == "__main__":
    linklist = initializeLinkedList(50)
    linklist = mergeSort(linklist)
    print("排序后:")
    print(linklist)
    linklist.printAll()
    pass
Example #3
0
        else:
            low = 0
            high = my_linked_list.length() - 1
            while low <= high:
                mid = (low + high) // 2
                node_pointer3 = my_linked_list.getNode(mid)
                if node_pointer3.getData() > number:
                    high = mid - 1
                elif node_pointer3.getData() < number:
                    low = mid + 1
                else:
                    return mid
            return -1


if __name__ == "__main__":
    start1 = time.perf_counter()
    linkedList = initializeLinkedList(400)
    linkedList = mergeSort(linkedList)
    linkedList.printAll()
    end1 = time.perf_counter()
    print("用时{0}秒".format(end1 - start1))
    num = input("请输入要查询的值:")
    start2 = time.perf_counter()
    index = halfSearch(linkedList, int(num))
    print("索引为:", index)
    print("该节点信息:", linkedList.getNode(index))
    end2 = time.perf_counter()
    print("用时{0}秒".format(end2 - start2))
    pass
Example #4
0
            exchangeNode(my_linked_list, 0)
    else:
        for i in range(1, my_linked_list.length()):
            j = i
            while j >= 1:
                node_pointer1 = my_linked_list.getNode(j)
                node_pointer2 = my_linked_list.getNode(j - 1)
                if node_pointer1.getData() < node_pointer2.getData():
                    exchangeNode(my_linked_list, j - 1)
                    j -= 1
                else:
                    break


def insertSort(my_linked_list):
    """方法入口"""
    _insertSort(my_linked_list, 1, 1)


if __name__ == "__main__":
    start = time.perf_counter()
    linked_list = initializeLinkedList(1000)
    print("插入排序前:")
    linked_list.printAll()
    insertSort(linked_list)
    print("插入排序后:")
    linked_list.printAll()
    end = time.perf_counter()
    print("用时{0}秒.".format(end - start))
    pass