Heim > Backend-Entwicklung > C++ > Hauptteil

Umgekehrte Gruppierung verknüpfter Listen nach gegebener Größe mit C++

WBOY
Freigeben: 2023-09-18 12:17:02
nach vorne
612 Leute haben es durchsucht

Umgekehrte Gruppierung verknüpfter Listen nach gegebener Größe mit C++

In diesem Artikel beschäftigen wir uns mit einer einfach verknüpften Liste und die Aufgabe besteht darin, die Liste in Gruppen von k umzukehren. Zum Beispiel -

Input: 1->2->3->4->5->6->7->8->NULL, K = 3
Output: 3->2->1->6->5->4->8->7->NULL

Input: 1->2->3->4->5->6->7->8->NULL, K = 5
Output: 5->4->3->2->1->8
Nach dem Login kopieren

Für dieses Problem fällt mir ein Ansatz ein, die Liste zu beenden und umzukehren, wenn die Größe der Unterliste k erreicht, und fortzufahren.

Methode zum Finden der Lösung

Mit dieser Methode durchlaufen wir normalerweise die Liste und führen einen Zähler, um die Anzahl der Elemente in der Unterliste zu zählen. Wenn der Zähler einen Zählerstand von k erreicht, invertieren wir diesen Teil.

Beispiel

#include <bits/stdc++.h>
using namespace std;
class Node {
   public:
   int data;
   Node* next;
};
Node* reverse(Node* head, int k) {
   if (!head)
      return NULL;
   Node* curr = head;
   Node* next = NULL;
   Node* prev = NULL;
   int count = 0;
   while (curr != NULL && count < k) { // we reverse the list till our count is less than k
      next = curr->next;
      curr->next = prev;
      prev = curr;
      curr = next;
      count++;
   }
   if (next != NULL) // if our link list has not ended we call reverse function again
      head->next = reverse(next, k);
   return prev;
}
void push(Node** head_ref, int new_data) { // function for pushing data in the list
   Node* new_node = new Node();
   new_node->data = new_data;
   new_node->next = (*head_ref);
   (*head_ref) = new_node;
}
void printList(Node* node) { // function to print linked list

   while (node != NULL) {
      cout << node->data << " ";
      node = node->next;
   }
   cout << "\n";
}
int main() {
   Node* head = NULL;

   int k = 3; // the given k

   push(&head, 8);
   push(&head, 7);
   push(&head, 6);
   push(&head, 5);
   push(&head, 4);
   push(&head, 3);
   push(&head, 2);
   push(&head, 1);

   cout << "Original list \n";
   printList(head);

   head = reverse(head, k); // this function will return us our new head
   cout << "New list \n";
   printList(head);
   return (0);
}
Nach dem Login kopieren

Ausgabe

Original list
1 2 3 4 5 6 7 8
New list
3 2 1 6 5 4 8 7

Nach dem Login kopieren

Die zeitliche Komplexität der obigen Methode beträgt O(N), wobei N die Größe der gegebenen Liste ist und die Methode für die Rekursion geeignet ist. Dieser Ansatz funktioniert auch für höhere Einschränkungen.

Erklärung des obigen Codes

Bei dieser Methode durchlaufen wir das Array und kehren es so lange um, bis unsere Zählervariable kleiner als k ist. Wenn der Zähler den Wert von k erreicht, rufen wir eine weitere Inversionsfunktion auf, um den letzten Knoten dieser Unterliste mit dem ersten Knoten der nächsten invertierten Unterliste zu verbinden. Dies geschieht rekursiv.

Fazit

In diesem Artikel haben wir das Problem der Umkehrung einer verknüpften Liste nach Gruppen einer bestimmten Größe mithilfe der Rekursion gelöst. Wir haben auch ein C++-Programm zur Lösung dieses Problems und eine vollständige Methode zur Lösung dieses Problems (Normal) gelernt. Wir können das gleiche Programm in anderen Sprachen wie C, Java, Python und anderen Sprachen schreiben. Wir hoffen, dass dieser Artikel für Sie hilfreich war.

Das obige ist der detaillierte Inhalt vonUmgekehrte Gruppierung verknüpfter Listen nach gegebener Größe mit C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage