예제 #1
0
def sum_lists_forward(listOne, listTwo):
    numOne = build_number_from_list_forward(listOne)
    numTwo = build_number_from_list_forward(listTwo)
    sumNum = numOne + numTwo

    returnList = LinkedList()
    
    while sumNum != 0:
        quotient = sumNum / 10
        remainder = sumNum % 10
        
        returnList.appendToTail(remainder)
        sumNum = quotient
    
    return returnList
예제 #2
0
파일: 2_6.py 프로젝트: kmzn128/CCI_Python
from linked_list import LinkedList

ll = LinkedList()

input_list = [3, 5, 8, 10, 8, 5, 4]

for i in input_list:
    ll.appendToTail(i)

reversed_ll = LinkedList()
for i in input_list:
    reversed_ll.appendToTail(i)

reversed_ll.reverse()
reversed_ll.list_print()
예제 #3
0
def is_palindrome(linkedList):
    palindromeStr = ""
    node = linkedList.head

    while node is not None:
        palindromeStr += node.data
        node = node.nextNode

    palindromeStr = palindromeStr.replace(" ", "")
    reversedPalindrome = palindromeStr[::-1]

    return palindromeStr == reversedPalindrome


linkedList = LinkedList()
linkedList.appendToTail('r')
linkedList.appendToTail('a')
linkedList.appendToTail('c')
linkedList.appendToTail('e')
linkedList.appendToTail('c')
linkedList.appendToTail('a')
linkedList.appendToTail('r')
print(is_palindrome(linkedList))

linkedList = LinkedList()
linkedList.appendToTail('r')
linkedList.appendToTail('a')
linkedList.appendToTail('w')
linkedList.appendToTail('r')
print(is_palindrome(linkedList))
예제 #4
0
from linked_list import LinkedList

input_list = [0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 6, 6, 6]
ll = LinkedList()
for elem in input_list:
    ll.appendToTail(elem)
ll.list_print()


def dup():
    curr = ll.head
    dup_checker = set()
    while (curr):
        if (curr.data not in dup_checker):
            dup_checker.add(curr.data)
        else:
            ll.remove(curr.data)
        curr = curr.next
    ll.list_print()


def no_dup():
    curr = ll.head.next
    runner = ll.head
    while (curr):
        while (runner.next is not curr.next):
            if (runner.data == curr.data):
                ll.remove(curr.data)
                runner = ll.head
            else:
                runner = runner.next
예제 #5
0
    returnList = LinkedList()
    
    while sumNum != 0:
        quotient = sumNum / 10
        remainder = sumNum % 10
        
        returnList.appendToTail(remainder)
        sumNum = quotient
    
    return returnList



linkedListOne = LinkedList()
linkedListOne.appendToTail(7)
linkedListOne.appendToTail(1)
linkedListOne.appendToTail(6)

linkedListTwo = LinkedList()
linkedListTwo.appendToTail(5)
linkedListTwo.appendToTail(9)
linkedListTwo.appendToTail(2)

rtnList = sum_lists(linkedListOne, linkedListTwo)
rtnList.printList()

linkedListOne = LinkedList()
linkedListOne.appendToTail(6)
linkedListOne.appendToTail(1)
linkedListOne.appendToTail(7)
예제 #6
0
from linked_list import LinkedList

ll = LinkedList()

for i in range(10):
    ll.appendToTail(i)

curr = ll.head
half_runner = ll.head
flip = False
while(curr.next):
    if(flip):
        flip = False
        half_runner = half_runner.next
    else:
        flip = True
    curr = curr.next
ll.remove_by_node(half_runner)

ll.list_print()


예제 #7
0
def removeDuplicates(linkedList):
    if linkedList.head is None:
        return

    dataPoints = {}
    node = linkedList.head
    prevNode = None

    while node is not None:
        if dataPoints.get(node.data) is None:
            dataPoints[node.data] = True
        else:
            print("removed " + node.data)
            if node.nextNode is None:
                prevNode.nextNode = None
            else:
                prevNode.nextNode = node.nextNode

        prevNode = node
        node = node.nextNode


linkedList = LinkedList()
linkedList.appendToTail("1")
linkedList.appendToTail("2")
linkedList.appendToTail("2")
linkedList.appendToTail("3")
linkedList.appendToTail("1")
removeDuplicates(linkedList)
linkedList.printList()
예제 #8
0
    if length == 0 or k > length:
        return  #empty

    elementToRemove = length - k
    currentIndex = 0

    node = linkedList.head
    prevNode = None

    while currentIndex < elementToRemove:
        prevNode = node
        node = node.nextNode
        currentIndex += 1

    if prevNode is None:
        linkedList.head = linkedList.head.nextNode
    else:
        prevNode.nextNode = node.nextNode

    return


linkedList = LinkedList()
linkedList.appendToTail("1")
linkedList.appendToTail("2")
linkedList.appendToTail("3")
linkedList.appendToTail("4")
linkedList.appendToTail("5")
removeKthToLast(linkedList, 3)
linkedList.printList()
예제 #9
0
    prevNode = None
    nodesToReattach = []

    while node is not None:
        if node.data >= pValue:
            if prevNode is None:
                linkedList.head = node.nextNode
            else:
                prevNode.nextNode = node.nextNode
            nodesToReattach.append(node)
            node = node.nextNode
        else:
            prevNode = node
            node = node.nextNode

    for nodeToAttach in nodesToReattach:
        nodeToAttach.nextNode = None # remove old refernece or else we're circular
        prevNode.nextNode = nodeToAttach
        prevNode = nodeToAttach
    

linkedList = LinkedList()
linkedList.appendToTail(3)
linkedList.appendToTail(5)
linkedList.appendToTail(8)
linkedList.appendToTail(5)
linkedList.appendToTail(10)
linkedList.appendToTail(2)
linkedList.appendToTail(1)
partition(linkedList, 5)
linkedList.printList()
예제 #10
0
from linked_list import LinkedList

ll_a = LinkedList()
ll_b = LinkedList()

a_value = [7, 1, 6]
b_value = [5, 9, 2]

for i in a_value:
    ll_a.appendToTail(i)
for i in b_value:
    ll_b.appendToTail(i)

ll_a.list_print()
ll_b.list_print()


def make_num(linked_list):
    if (not linked_list.head):
        return -1
    curr = linked_list.head
    digit = 0
    sum = 0
    while (curr):
        sum += curr.data * (10**digit)
        curr = curr.next
        digit += 1
    return sum


a = make_num(ll_a)