Dada una lista enlazada, escribe una función para invertir cada k Node (donde k es una entrada a la función).
Ejemplo:
Entrada : 1->2->3->4->5->6->7->8->NULL, K = 3
Salida : 3->2->1->6->5->4- >8->7->NULO
Entrada : 1->2->3->4->5->6->7->8->NULO, K = 5
Salida : 5->4->3-> 2->1->8->7->6->NULO
Algoritmo : inverso (cabeza, k)
- Invierta la primera sublista de tamaño k. Mientras retrocede, realice un seguimiento del siguiente Node y del Node anterior. Deje que el puntero al siguiente Node sea next y el puntero al Node anterior sea prev . Consulte esta publicación para invertir una lista vinculada.
- head->next = reverse(next, k) (Llama recursivamente al resto de la lista y vincula las dos sublistas)
- Return prev ( prev se convierte en el nuevo encabezado de la lista (ver los diagramas de un método iterativo de esta publicación )
La siguiente imagen muestra cómo funciona la función inversa:
A continuación se muestra la implementación del enfoque anterior:
Python
# Python program to reverse a # linked list in group of given size # Node class class Node: # Constructor to initialize the # node object def __init__(self, data): self.data = data self.next = None class LinkedList: # Function to initialize head def __init__(self): self.head = None def reverse(self, head, k): if head == None: return None current = head next = None prev = None count = 0 # Reverse first k nodes of the linked list while(current is not None and count < k): next = current.next current.next = prev prev = current current = next count += 1 # next is now a pointer to (k+1)th node # recursively call for the list starting # from current. And make rest of the list as # next of first node if next is not None: head.next = self.reverse(next, k) # prev is new head of the input list return prev # Function to insert a new node at # the beginning def push(self, new_data): new_node = Node(new_data) new_node.next = self.head self.head = new_node # Utility function to print the # Linked List def printList(self): temp = self.head while(temp): print temp.data, temp = temp.next # Driver code llist = LinkedList() llist.push(9) llist.push(8) llist.push(7) llist.push(6) llist.push(5) llist.push(4) llist.push(3) llist.push(2) llist.push(1) print "Given linked list" llist.printList() llist.head = llist.reverse(llist.head, 3) print "Reversed Linked list" llist.printList() # This code is contributed by Nikhil Kumar Singh(nickzuck_007)
Producción:
Given Linked List 1 2 3 4 5 6 7 8 9 Reversed list 3 2 1 6 5 4 9 8 7
Análisis de Complejidad:
- Complejidad temporal: O(n).
El recorrido de la lista se realiza solo una vez y tiene ‘n’ elementos. - Espacio Auxiliar: O(n/k).
Para cada Lista Enlazada de tamaño n, n/k o (n/k)+1 se realizarán llamadas durante la recursividad.
Consulte el artículo completo sobre Invertir una lista vinculada en grupos de tamaño determinado | ¡ Establezca 1 para 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