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)
    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 #3
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 #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
from Data_structures import Node


def del_middle_node(mid):
    """
        Will Delete Middle Node in singly linkedList,
        will return error if last node referenced,
        will DELETE the head node, if given head
    """
    if mid is None:
        raise ValueError("None Value given")
    if mid.next is None:
        raise ValueError("last node given")
    mid.val = mid.next.val
    # If 2nd last node
    if mid.next.next is None:
        mid.next = None
    else:
        mid.next = mid.next.next


if __name__ in '__main__':
    head = Node(10)
    head.appendToTail(20, 's')
    head.appendToTail(46, 's')
    head.appendToTail(7654, 's')
    head.printLinkedList()
    midNode = head.findNode(10)
    del_middle_node(midNode)
    head.printLinkedList()
Example #6
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 #7
0
    pointer = pointer.next
    while(pointer):
        # Seen this value before
        if pointer.val in my_set:
            # If End of LinkedList
            if pointer.next is None:
                pointer_prev.next = None
                break
            else:
                pointer_prev.next = pointer.next
        # Not seen before
        else:
            my_set.add(pointer.val)
            pointer_prev = pointer
        pointer = pointer.next
    return head


if __name__ == '__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()
    remove_dupes_singly(head)  # Should remove Dupes from LinkedList
    head.printLinkedList()
Example #8
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 #9
0
    pointer = pointer.next
    while (pointer):
        # Seen this value before
        if pointer.val in my_set:
            # If End of LinkedList
            if pointer.next is None:
                pointer_prev.next = None
                break
            else:
                pointer_prev.next = pointer.next
        # Not seen before
        else:
            my_set.add(pointer.val)
            pointer_prev = pointer
        pointer = pointer.next
    return head


if __name__ == '__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()
    remove_dupes_singly(head)  # Should remove Dupes from LinkedList
    head.printLinkedList()
Example #10
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 #11
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 #12
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))