Exemplo n.º 1
0
def divideList(lt):  # O(len(lt)/2)
    half_index = int(lt.len / 2.0)
    a = LinkedList()
    for i in range(half_index):
        a.addNodeE(Node(lt.head.val))
        lt.delNodeH()
    return a, lt
Exemplo n.º 2
0
def getWordList(line):  # O(n)
    wordList = LinkedList()
    temp = ''
    for char in line:
        if char != ' ':
            temp = temp + char
        else:
            if temp != '':
                wordList.addNodeE(Node(temp))
                temp = ''
    return wordList
Exemplo n.º 3
0
def mergeSort(lt):  # O(nlogn)
    if lt.len < 2:
        return lt
    elif lt.len == 2:
        if lt.head.val < lt.end.val:
            return lt
        else:
            sorted_lt = LinkedList()
            sorted_lt.addNodeH(Node(lt.end.val))
            sorted_lt.addNodeE(Node(lt.head.val))
            return sorted_lt
    else:
        a, b = divideList(lt)
        sorted_a = mergeSort(a)
        sorted_b = mergeSort(b)
        return sortedMerge(sorted_a, sorted_b)
Exemplo n.º 4
0
def sortedMerge(a, b):  # O(len(a)+len(b))
    sorted_list = LinkedList()
    while a.len != 0 and b.len != 0:
        if a.head.val < b.head.val:
            sorted_list.addNodeE(Node(a.head.val))
            a.delNodeH()
        else:
            sorted_list.addNodeE(Node(b.head.val))
            b.delNodeH()
    if a.len == 0:
        sorted_list.addNodeE(b.head)
    else:
        sorted_list.addNodeE(a.head)
    return sorted_list
Exemplo n.º 5
0
def getNumList(line):  # O(n)
    numList = LinkedList()
    for num in line:
        numList.addNodeE(Node(num))
    return numList