Example #1
0
def main():
    head = Node(10)
    head.appendToTail(20, 's')
    head.appendToTail(46, 's')
    head.appendToTail(7654, 's')
    head.printLinkedList()
    print(kthElement(head, 3))
    head.printLinkedList()
Example #2
0
def main():
    head = Node(10)
    head.appendToTail(20, 's')
    head.appendToTail(46, 's')
    head.appendToTail(7654, 's')
    head.printLinkedList()
    midNode = head.findNode(10)
    delMiddleNode(midNode)
    head.printLinkedList()
Example #3
0
def main():
    head = Node(10)
    head.appendToTail(20)
    head.appendToTail(50)  # Dupe
    head.appendToTail(30)
    head.appendToTail(120)
    head.appendToTail(50)  # Dupe
    head.appendToTail(10)
    head.appendToTail(15)
    head.printLinkedList()
    removeDupesDoubly(head)  # Should remove Dupes from LinkedList
    head.printLinkedList()
    return
Example #4
0
    while (p):
        if p.val < pValue:
            before.append(p.val)
        elif p.val == pValue:
            p = p.next
            continue
        else:
            after.append(p.val)
        p = p.next
    # Make new list with before - pValue - after
    new_list = []
    new_list.extend(before)
    new_list.append(pValue)
    new_list.extend(after)
    p = head
    # iterate through linkedlist and change values
    for i in range(len(new_list)):
        p.val = new_list[i]
        p = p.next
    return


if __name__ in '__main__':
    head = Node(10)
    head.appendToTail(46, 's')
    head.appendToTail(20, 's')
    head.appendToTail(7654, 's')
    head.printLinkedList()
    partition_linked_list(head, 46)
    head.printLinkedList()
Example #5
0
        if pB in visited:
            return pB
        if pA is pB:
            return pA
        visited.add(pA)
        visited.add(pB)
        if pA:
            pA = pA.next
        if pB:
            pB = pB.next
    return None


if __name__ in '__main__':
    # Making A LinkedLIst
    headA = Node(10)
    headA.next = Node(20)
    # Making B LinkedList
    headB = Node(765)
    headB.next = Node(543)
    headB.next.next = Node(432)
    # Creating Intersecting Node and appendingn to lists
    intersectNode = Node(40)
    headA.next.next = intersectNode
    headB.next.next.next = intersectNode
    # adding some more fluff nodes
    headA.next.next.next = Node(50)
    headA.next.next.next.next = Node(53)
    headA.printLinkedList()
    headB.printLinkedList()
    print(intersection(headA, headB).val)
Example #6
0
from Data_structures import Node


def loop_checker(head):
    visited = set()
    if head is None or head.next is None:
        raise ValueError("Head or Head.next is None")
    p = head
    visited.add(p)
    p = p.next
    while (p):
        if p in visited:
            return p
        else:
            visited.add(p)
            p = p.next
    return None


if __name__ in '__main__':
    head = Node(10)
    head.next = Node(20)
    cycleNode = Node(40)
    head.next.next = cycleNode
    head.next.next.next = Node(50)
    head.next.next.next.next = Node(53)
    head.next.next.next.next.next = cycleNode
    # Can not print linkedList, as there's a cycle
    # head.printLinkedList()
    print(loop_checker(head).val)
Example #7
0
            return False
    return True


def is_palindrome_stack(head):
    myStack = Stack()
    p = head
    # First Pass, put all values in Stack
    while (p is not None):
        myStack.push(p.val)
        p = p.next
    # second pass
    p = head
    while (p is not None):
        if p.val != myStack.pop():
            return False
        else:
            p = p.next
    return True


if __name__ in '__main__':
    head = Node('R')
    head.appendToTail('A')
    head.appendToTail('D')
    head.appendToTail('A')
    head.appendToTail('R')
    head.printLinkedList()
    print(is_palindrome_node(head))
    print(is_palindrome_stack(head))