def linkedListPalindrome(linkedList):
    myHashTable = HashTable()
    pointer = linkedList.head
    while (pointer):
        if (myHashTable.get(pointer.value)):
            myHashTable.put(pointer.value, myHashTable.get(pointer.value) + 1)
        else:
            myHashTable.put(pointer.value, 1)
        pointer = pointer.next
    isPalindrome = True
    evenCount = 0
    oddCount = 0
    for i in range(0, len(myHashTable.getEntries())):
        if (myHashTable.getEntries()[i]['value'] % 2 == 0):
            evenCount = evenCount + 1
        else:
            oddCount = oddCount + 1
    if (oddCount > 1):
        isPalindrome = False
    return isPalindrome
def zeroMatrix(matrix):
    m = len(matrix)
    n = len(matrix[0])
    iHashTable = HashTable()
    jHashTable = HashTable()
    for i in range(0, m):
        for j in range(0, n):
            if (matrix[i][j] == 0):
                iHashTable.put(i, "i")
                jHashTable.put(j, "j")
    ientries = iHashTable.getEntries()
    jentries = jHashTable.getEntries()

    for i in range(0, len(ientries)):
        for j in range(0, n):
            matrix[ientries[i]['key']][j] = 0
    for i in range(0, len(jentries)):
        for j in range(0, m):
            matrix[j][jentries[i]['key']] = 0
    return matrix
def removeDups(linkedList):
    myHashTable = HashTable()
    current = linkedList.head
    while (current):
        myHashTable.put(current.value, "node")
        current = current.next
    entries = myHashTable.getEntries()
    current = linkedList.head
    for i in range(0, len(entries)):
        if (i == 0):
            linkedList.head.value = entries[i]['key']
        else:
            current.next.value = entries[i]['key']
            current = current.next
    current.next = None
    return linkedList
def palindromePermutation(string):
    word = string.lower()
    myHashTable = HashTable()
    for i in range(0, len(word)):
        if (myHashTable.get(word[i]) != None):
            myHashTable.put(word[i], myHashTable.get(word[i]) + 1)
        elif (myHashTable.get(word[i]) == None and word[i] != " "):
            myHashTable.put(word[i], 1)

    numOfEvenOccurences = 0
    numOfOddOccurences = 0

    entries = myHashTable.getEntries()
    for i in range(0, len(entries)):
        if (entries[i]['value'] % 2 == 0):
            numOfEvenOccurences = numOfEvenOccurences + 1
        elif (entries[i]['value'] % 2 == 1):
            numOfOddOccurences = numOfOddOccurences + 1

    if (numOfOddOccurences > 1):
        return False
    else:
        return True