Example #1
0
def padZeros(ll, num_of_zeros):
    'Pad linked list with number of zeros specified'
    for i in range(num_of_zeros):
        zeroNode = Node(0)
        zeroNode.next = ll
        ll = zeroNode
        return ll
Example #2
0
def reverse(node):
    head = None
    while (node):
        newNode = Node(node.data)
        newNode.next = head
        head = newNode
        node = node.next
    return head
Example #3
0
def callRecSumList(l1, l2, carry=0):
    sumNode = Node()
    if l1.next and l2.next:
        sumNode.next, carry = callRecSumList(l1.next, l2.next)
    value = carry
    if l1:
        value += l1.data
    if l2:
        value += l2.data
    carry = value // 10
    #print(value, ',', carry, '\n')
    value = value % 10
    sumNode.data = value
    return sumNode, carry
Example #4
0
def sumList(l1, l2, carry):
    'Sum the linked list with digits stored in reverse order'
    # Base case
    if not l1 and not l2 and carry == 0:
        return None
    value = carry
    if l1:
        value += l1.data
    if l2:
        value += l2.data
    # calculate carry over for next node
    carry = value // 10
    # calculate data of the node
    value = value % 10
    sumNode = Node(value)
    if l1 and l2:
        nextNode = sumList(l1.next if l1 else None, l2.next if l2 else None,
                           carry)
        sumNode.next = nextNode
    return sumNode
Example #5
0
    # if lengths are not equal, pad the smaller one with zeros
    num_of_zeros = length(l1) - length(l2)
    if num_of_zeros > 0:
        # pad l2 with zeros
        l2 = padZeros(l2, abs(num_of_zeros))
    elif num_of_zeros < 0:
        # pad l1 with zeros
        l1 = padZeros(l1, abs(num_of_zeros))
    node, carry = callRecSumList(l1, l2, carry=0)
    node.data += carry
    return node


if __name__ == "__main__":
    # Creating nodes
    node1 = Node(7)
    node2 = Node(1)
    node3 = Node(6)

    node4 = Node(5)
    node5 = Node(9)
    node6 = Node(2)
    node7 = Node(1)

    node1.next = node2
    node2.next = node3

    node4.next = node5
    node5.next = node6
    node6.next = node7
    # Creating 1st Linkedlist
Example #6
0
                current = current.next
            else:
                afterTail.next = current
                afterTail = current
                current = current.next

    if not beforeHead:
        return afterHead

    beforeTail.next = afterHead
    return beforeHead


if __name__ == "__main__":
    # Creating nodes
    node1 = Node(3)
    node2 = Node(5)
    node3 = Node(89)
    node4 = Node(17)
    node5 = Node(13)
    node6 = Node(215)
    node7 = Node(17)
    node8 = Node(23)
    node9 = Node(825)
    node10 = Node(27)
    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5
    node5.next = node6
    node6.next = node7
Example #7
0
        longer = increment(l1headNode,
                           diffLen) if l1size > l2size else increment(
                               l2headNode, diffLen)
        shorter = l2headNode if l1size > l2size else l1headNode

    while shorter and longer:
        if shorter == longer:
            return shorter
        shorter = shorter.next
        longer = longer.next
    return None


if __name__ == "__main__":
    # Creating nodes
    node1 = Node("3")
    node2 = Node("5")
    node3 = Node("89")
    node4 = Node("17")
    node5 = Node("13")
    node6 = Node("215")
    node7 = Node("17")
    node8 = Node("23")
    node9 = Node("825")
    node10 = Node("27")

    node11 = Node("3")
    node12 = Node("5")

    node1.next = node2
    node2.next = node3
    while count < k:
        if not p1:
            return
        p1 = p1.next
        count += 1

    while p1:
        p1 = p1.next
        p2 = p2.next

    return p2.data


if __name__ == "__main__":
    # Creating nodes
    node1 = Node("3")
    node2 = Node("5")
    node3 = Node("7")
    node4 = Node("13")
    node5 = Node("25")
    node6 = Node("37")
    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5
    node5.next = node6
    # Creating Linkedlist
    ll = LinkedList(node1)
    ll.printElements()

    print("\n Kth to last element: ", kthtolast(ll, 4))
Example #9
0
    current = headNode.head
    while current.next:
        runner = current
        while runner.next:
            if runner.next.data == current.data:
                runner.next = runner.next.next
            else:
                runner = runner.next
        current = current.next


# Time Complexity = O(n^2), space complexity:O(1)

if __name__ == "__main__":
    # Creating nodes
    node1 = Node("23")
    node2 = Node("5")
    node3 = Node("215")
    node4 = Node("7")
    node5 = Node("13")
    node6 = Node("215")
    node7 = Node("17")
    node8 = Node("23")
    node9 = Node("215")
    node10 = Node("97")
    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5
    node5.next = node6
    node6.next = node7
from NodeInsertion import Node, LinkedList


def deleteNode(node):
    "Delete middle node"
    if not node or not node.next:
        return False
    nextnode = node.next
    node.data = nextnode.data
    node.next = nextnode.next
    return True


if __name__ == "__main__":
    # Creating nodes
    node1 = Node("3")
    node2 = Node("5")
    node3 = Node("7")
    node4 = Node("16")
    node5 = Node("1")
    node6 = Node("50")
    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5
    node5.next = node6
    # Creating Linkedlist
    ll = LinkedList(node1)
    ll.printElements()

    print("\n", deleteNode(node5))
Example #11
0
    while nodel1 and nodel2:
        if nodel1.data != nodel2.data:
            return False
        nodel1 = nodel1.next
        nodel2 = nodel2.next
    return True


def isPalindrome(headNode):
    reversed = reverse(headNode)
    return isEqual(headNode, reversed)


if __name__ == "__main__":
    # Creating nodes
    node1 = Node("3")
    node2 = Node("5")
    node3 = Node("8")
    node4 = Node("9")
    node5 = Node("8")
    node6 = Node("5")
    node7 = Node("3")

    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5
    node5.next = node6
    node6.next = node7

    # Creating Linkedlist