Programa de Python para mover el último elemento al frente de una lista vinculada dada

Escriba una función que mueva el último elemento al frente en una lista enlazada simple dada. Por ejemplo, si la lista enlazada dada es 1->2->3->4->5, entonces la función debería cambiar la lista a 5->1->2->3->4.
Algoritmo:
recorrer la lista hasta el último Node. Utilice dos punteros: uno para almacenar la dirección del último Node y el otro para la dirección del penúltimo Node. Después del final del ciclo, realice las siguientes operaciones.

  1. Hacer penúltimo como último (secLast->next = NULL).
  2. Establecer el penúltimo como encabezado (last->next = *head_ref).
  3. Hacer último como cabeza (*head_ref = último).

Python3

# Python3 code to move the last item 
# to front
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
  
class LinkedList:
    def __init__(self):
        self.head = None
  
    # Function to add a node 
    # at the beginning of Linked List
    def push(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node
          
    # Function to print nodes in 
    # a given linked list
    def printList(self):
        tmp = self.head
        while tmp is not None:
            print(tmp.data, end = ", ")
            tmp = tmp.next
        print()
  
    # Function to bring the last node 
    # to the front
    def moveToFront(self):
        tmp = self.head
  
        # To maintain the track of
        # the second last node
        sec_last = None 
  
        # To check whether we have not 
        # received the empty list or list 
        # with a single node
        if not tmp or not tmp.next: 
            return
  
        # Iterate till the end to get
        # the last and second last node 
        while tmp and tmp.next :
            sec_last = tmp
            tmp = tmp.next
  
        # Point the next of the second
        # last node to None
        sec_last.next = None
  
        # Make the last node as the 
        # first Node
        tmp.next = self.head
        self.head = tmp
  
# Driver Code
if __name__ == '__main__':
    llist = LinkedList()
      
    # Swap the 2 nodes
    llist.push(5)
    llist.push(4)
    llist.push(3)
    llist.push(2)
    llist.push(1)
    print (
    "Linked List before moving last to front ")
    llist.printList()
    llist.moveToFront()
    print (
    "Linked List after moving last to front ")
    llist.printList()

Producción:

Linked list before moving last to front 
1 2 3 4 5 
Linked list after removing last to front 
5 1 2 3 4

Complejidad de tiempo: O(n) donde n es el número de Nodes en la lista enlazada dada.

Consulte el artículo completo sobre Mover el último elemento al frente de una lista vinculada determinada para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *