# def remove_duplicates(node):
#     # Using 2 pointers(heads) current and runner
#     current = node
#     while current != None:
#         runner = current
#         while runner.next != None:
#             if current.data == runner.next.data:
#                 runner.next = runner.next.next #skip
#             else:
#                 runner = runner.next # shift ahead
#         current = current.next


def remove_duplicates(node):
    current = node
    runner = node.next
    while runner != None:
        while current.data == runner.data:
            runner = runner.next
            current.next = runner
        current = current.next
        runner = runner.next


if __name__ == "__main__":
    data = [1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5]
    head = nodelist_builder(data)
    remove_duplicates(head)
    printNodes(head)
    if node == None: return None
    dummy_node = ListNode()
    head = dummy_node
    while node != None:
        next = node.next
        node.next = head.next #None if head.next == None else
        head.next = node
        node = next
    return head.next
# def reverse(head):
#     if head == None or head.next == None:
#         return head
#     p = reverse(head.next)
#     head.next.next = head  # 4->5  : 4->5->4
#     head.next = None # 4->5->4  : 5->4
#     return p


if __name__ == "__main__":
    data = [
        [1, 2, 3, 4, 5],
        [50, 40, 30, 20, 10],
        [],
        [3, 2]
    ]
    for test_list in data:
        head = nodelist_builder(test_list)
        rnode = reverse(head)
        printNodes(rnode)
        print("---x---")
Пример #3
0
#             f2 = f2.next
#     f1.next = mid
#     return start


def oddEvenList(node):
    if node == [] or node == None: return None
    head = node
    tail = node
    while node != None:
        next = node.next
        if node.val % 2 == 0:  # Even
            node.next = head
            head = node
        else:
            tail.next = node
            tail = node
        node = next
    # detach self loop
    tail.next = None
    return head


if __name__ == "__main__":
    data = [[1, 2, 3, 4, 5], [60, 50, 40, 30, 20, 10], [], [3, 2], [1]]
    for test_list in data:
        head = nodelist_builder(test_list)
        rhead = oddEvenList(head)
        printNodes(rhead)
        print("---x---")
    if result1.tail != result2.tail:
        return None
    shorter = node1 if result1.size < result2.size else node2
    longer = node2 if result1.size < result2.size else node1
    # Shift head of longer list
    longer = get_kth_node(longer, abs(result1.size - result2.size))
    while shorter != longer:
        shorter = shorter.next
        longer = longer.next
    return longer


if __name__ == "__main__":
    n1 = Node(1)
    n2 = Node(2)
    n3 = Node(3)
    n4 = Node(4)
    n5 = Node(5)
    # list 1
    n1.next = n2
    n2.next = n3
    n3.next = n5
    # List 2
    n4.next = n3
    n3.next = n5

    printNodes(n1)
    print()
    printNodes(n4)
    print("Intersection:", find_intersection(n1, n4).data)
Пример #5
0
        next = node.next
        if node.val == val:
            #print("yes")
            prev.next = next
        else:
            prev = node
        #print(prev.val)
        node = next
    return dummy_node.next

if __name__ == "__main__":
    data = [
        ([4, 5, 1, 9], 5),
        ([4, 5, 1, 9], 1),
        ([1, 2, 3, 4], 3),
        ([0, 1], 0),
        ([1], 1),
        ([-3, 5, -99], -3)
    ]
    for test_list in data:
        head = nodelist_builder(test_list[0])
        # dnode = head
        # while dnode != None:
        #     if dnode.val == test_list[1]:
        #         break
        #     dnode = dnode.next
        # delete(dnode)
        new_node = delete(head, test_list[1])
        printNodes(new_node)
        print("---x---")
Пример #6
0
    ([3, 5, 8, 5, 10, 2, 1], 5)

def partition(node, threshold):
    left = node
    head = node
    previous = None
    while head != None:
        if head.data < threshold:
            next = head.next
            if previous:
                previous.next = next
            else:
                previous =
            head.next = left
            head = next
        else:
            previous = head
            head = head.next


if __name__ == "__main__":
    data = [
        ([10, 1, 2, 3, 4, 2, 4, 5], 3),
        ([3, 5, 8, 5, 10, 2, 1], 5)
    ]
    for test_tuple in data:
        head = nodelist_builder(test_tuple[0])
        new_head = partition(head, test_tuple[1])
        printNodes(new_head)
        print()
Пример #7
0
from linked_list import ListNode, nodelist_builder, printNodes


def merge(l1, l2):
    if l1 == None and l2 == None: return None
    dummy_node = ListNode()
    dummy_head = dummy_node
    while l1 != None and l2 != None:
        if l1.val < l2.val:
            dummy_head.next = l1
            #dummy_head = dummy_head.next
            l1 = l1.next
        else:
            dummy_head.next = l2
            #dummy_head = dummy_head.next
            l2 = l2.next
        dummy_head = dummy_head.next
    dummy_head.next = l1 if l1 != None else l2
    return dummy_node.next


if __name__ == "__main__":
    data = [([1, 2, 4], [1, 3, 4]), ([], []), ([], [0])]
    for test_list in data:
        l1 = nodelist_builder(test_list[0])
        l2 = nodelist_builder(test_list[1])
        m_node = merge(l1, l2)
        printNodes(m_node)
        print("---x---")