Example #1
0
def rearrange(list):
    first = list
    slow = first
    fast = slow
    secound = None
    new_list = LinkedList()
    new_node = None
    flag = True

    while fast.get_next() and fast.get_next().get_next():
        slow = slow.get_next()
        fast = fast.get_next().get_next()

    secound = slow.get_next()
    slow.set_next(None)

    l1 = LinkedList(secound)
    l1.reverse_list()
    secound = l1.head

    while first and secound:
        if new_node is None:
            new_node = Node(first.get_data())
            new_list.head = new_node
            first = first.get_next()
            flag = False

        elif flag is True:
            new_node.set_next(Node(first.get_data()))
            new_node = new_node.get_next()
            first = first.get_next()
            flag = False

        elif flag is False:
            new_node.set_next(Node(secound.get_data()))
            new_node = new_node.get_next()
            secound = secound.get_next()
            flag = True

    if secound is not None:
        new_node.set_next(secound)
    if first is not None:
        new_node.set_next(first)

    return new_list.head
Example #2
0
        current = next_node

    return prev


def reverse_block(head, k):
    start = end = pointer = head
    temp = 0

    while end is not None:
        if temp == k:
            if start == head:
                head = reverse_list(start, end)
                pointer = start
            else:
                pointer.set_next(reverse_list(start, end))
                pointer = start
            start = end
            temp = 0
        temp += 1
        end = end.get_next()
    return head


if __name__ == "__main__":
    l1 = LinkedList()
    l1.create_list([40, 35, 30, 25, 20, 15, 10, 5, 1, 2, 75, 85])

    l1.head = reverse_block(l1.head, 2)
    l1.print_data(l1.head)