Example #1
0
    - Remove middle element
"""
from singlyLL import SinglyLL


def delete_middle(head):
    """ Delete middle element of a linked list """
    fast_node = head
    slow_node = head
    prev_node = None
    while fast_node and fast_node.next is not None:
        prev_node = slow_node
        slow_node = slow_node.next
        fast_node = fast_node.next.next

    print('Deleting middle element ' + str(slow_node.data))

    prev_node.next = slow_node.next


if __name__ == '__main__':
    ll = SinglyLL()
    for i in range(0, 20):
        ll.append(i)

    print(ll.display())

    delete_middle(ll.head)

    print(ll.display())
Example #2
0

def find_nth_from_last2(head, pos):
    """ Find nth item from the end without length"""
    ref_node = head
    main_node = head
    cur_pos = 1

    while cur_pos is not pos:
        ref_node = ref_node.next
        cur_pos += 1

    while ref_node.next is not None:
        main_node = main_node.next
        ref_node = ref_node.next

    return main_node.data


if __name__ == '__main__':
    sll = SinglyLL()

    for i in range(0, 10):
        sll.append(i)

    print(sll.display())

    print(find_nth_from_last2(sll.head, 2))

    print(find_nth_from_last1(sll.head, 2, sll.size() - 1))
Example #3
0
"""
For testing

"""

from singlyLL import SinglyLL

if __name__ == '__main__':
    sll = SinglyLL()

    for i in range(0, 10):
        sll.append(i)

    print(sll.display())
    print(sll.size())
    print(sll.get_node_at_index(12))
    sll.print_node(sll.get_node_at_index(3))
Example #4
0
if __name__ == '__main__':
    # ll = SinglyLL()
    # for i in range(1, 9):
    #     ll.append(i)
    # print(ll.display())
    # reverse_linked_list(ll)
    # print(ll.display())

    # ll2 = SinglyLL()
    # for i in range(0, 6):
    #     ll2.append(i)
    # print(ll2.display())
    # ll2.head = reverse_linked_list_recursive(ll2.head)
    # print(ll2.display())

    print('Reverse every K Node')
    ll3 = SinglyLL()
    for i in range(18, 9, -1):
        ll3.append(i)
    print(ll3.display())
    ll3.head = reverse_in_groups(ll3.head, 3)
    print(ll3.display())

    # print('Reverse every K node, alternatively')
    # ll4 = SinglyLL()
    # for i in range(3, 9):
    #     ll4.append(i)
    # print(ll4.display())
    # ll4.head = reverse_in_groups_alt(ll4.head, 2, True)
    # print(ll4.display())
Example #5
0
    """ remove a loop """
    main_node = head

    while True:
        ref_node = loop_node
        while ref_node.next != loop_node and ref_node.next != main_node:
            ref_node = ref_node.next
        if ref_node.next == main_node:
            break

        main_node = main_node.next

    ref_node.next = None


if __name__ == '__main__':
    # Single Linked List
    ll = SinglyLL()
    for i in range(1, 5):
        insert_node_at(ll.head, i, 0)

    detect_loop(ll.head)

    # Single Linked list with loop
    lll = SinglyLL()
    create_ll_with_loop(lll)
    detect_loop(lll.head)

    # after removal of loop
    detect_loop(lll.head)
Example #6
0
        prev = l3.next

        if l1 is not None:
            l1 = l1.next
        if l2 is not None:
            l2 = l2.next

    if carry < 0:
        l3.append(carry)

    print(l3.display())


if __name__ == '__main__':
    l1 = SinglyLL()
    l1.append(3)
    l1.append(4)
    l1.append(5)
    print(l1.display())

    l2 = SinglyLL()
    l2.append(2)
    l2.append(5)
    l2.append(9)
    l2.append(8)
    print(l2.display())

    l3 = SinglyLL()
    add_two_numbers(l1.head, l2.head, l3.head)
Example #7
0
        prev_node = cur_node
        cur_node = next_node
        count += 1

    if next_node:
        if is_alt:
            is_alt = False
        else:
            is_alt = True
        head.next = reverse_in_groups_alt(next_node, k, is_alt)

    return prev_node


if __name__ == '__main__':
    ll = SinglyLL()
    for i in range(1, 9):
        ll.append(i)
    print(ll.display())
    reverse_linked_list(ll)
    print(ll.display())

    ll2 = SinglyLL()
    for i in range(0, 6):
        ll2.append(i)
    print(ll2.display())
    ll2.head = reverse_linked_list_recursive(ll2.head)
    print(ll2.display())

    print('Reverse every K Node')
    ll3 = SinglyLL()
Example #8
0
"""


from singlyLL import SinglyLL


def find_middle(head):
    """ Find middle element in a linkedlist """
    slow_node = head
    fast_node = head
    """taking fast_node not none condition to
    prevent nontype error in case of odd number
    of nodes.
    """
    while fast_node and fast_node.next is not None:
        slow_node = slow_node.next
        fast_node = fast_node.next.next

    return slow_node.data


if __name__ == '__main__':
    sll = SinglyLL()

    for i in range(0, 10):
        sll.append(i)

    print(sll.display())

    print(find_middle(sll.head))
Example #9
0

def remove_dup_sorted_list(head):
    """ remove duplicate elements from a sorted list """
    cur_node = head

    while cur_node.next is not None:
        prev_node = cur_node
        cur_node = cur_node.next
        if cur_node.data == prev_node.data:
            prev_node.next = cur_node.next


if __name__ == '__main__':
    print('Removing Dups from an unsorted list')
    sll = SinglyLL()
    sll.append(2)
    sll.append(3)
    sll.append(4)
    sll.append(2)
    sll.append(5)
    sll.append(3)

    print(sll.display())

    remove_dup(sll.head)

    print(sll.display())

    print('*' * 10)
Example #10
0
    new_node = Node(data)
    cur_pos = 0

    # invalid index
    if position > sll.size():
        print('Invalid index')
        return False

    # First node
    if cur_node is None:
        print('adding first node')
        cur_node = Node(data)
        return cur_node

    while cur_node is not None:
        if cur_pos == position:
            print('adding new node at pos ' + str(cur_pos))
            prev_node.next = new_node
            new_node.next = cur_node
        prev_node = cur_node
        cur_node = cur_node.next
        cur_pos += 1


if __name__ == '__main__':
    sll = SinglyLL()
    for index, value in enumerate(range(3, 9)):
        insert_node_at(sll, value, 0)
    print(sll.display())
    print(sll.size())