Anexar últimos N nodos al primer lugar en la lista enlazada mediante el programa C ++

Aquí, vamos a aprender cómo anexar última N nodos que por primera vez en la lista enlazada mediante un programa en C ++ C?

Dada una lista enlazada y un entero n, append los últimos n elementos de la LL a frente. Supongamos dado n será más pequeño que la longitud de LL.

Formato de entrada: Línea 1: Vinculado elementos de la lista (separados por el espacio y terminado por -1

    Sample Input 1 :
1 2 3 4 5 -1
3
Sample Output 1 :
3 4 5 1 2

Descripción:

La pregunta nos pide para anexar los últimos N nodos a frente, es decir, el nueva ligado lista debe primero comenzar desde los nodos N y luego recorrer el resto de los nodos a través de la cabeza de la lista enlazada de edad

Ejemplo:.

    For Linked List 1->2->3->4->5->6->NULL
To append the last 2 nodes, the new linked list should be:
5->6->1->2->3->4->NULL

Solución Explicación:

para resolver este problema, tomamos dos punteros temp y t y el punto dos de ellos en la cabeza de la lista enlazada tomamos otra variable i y equipararla a -.. n Este i se utiliza hallazgo class la cabeza de la nueva lista enlazada. Entonces se recorre el bucle mientras temp! = class . En el bucle, comprobamos que si (i> = 0) es decir temp es ahora n nodos lejos de t , t = t> siguiente . Vamos a actualizar i ++ y temp = TEMP-> siguiente en cada recorrido. Por fin, actualizamos TEMP-> siguiente = cabeza, la cabeza = t -> siguiente y t-> siguiente = class .

Algoritmo:

  • PASO 1: declarar la función appendNNode con parámetros (Nodo * cabeza, class n)
  • PASO 2: Declare dos variables Nodo * temp , t y apuntar a ambos a la cabeza.
  • PASO 3: DECLARE class i = -n
  • PASO 4: Repetir y Paso 5 6, mientras (TEMP-> siguiente = class!)
  • PASO 5: si (i> = 0) t = t> siguiente .
  • PASO 6: temp = TEMP-> siguiente, i ++ .
  • PASO 7: TEMP-> siguiente = cabeza , cabeza = T-> próximos , y t-> siguiente = for
  • Paso 8: class cabeza

Pasos :

    At first: 1->2->3->4->5->6->NULL, t->1 and temp->1.
After complete traversal: 1->2->3->4->5->6->NULL, t->4 and temp->6.
So, temp->next = head and head = t->next
i.e 5->6->1->2->3->4 --- (reconnecting to 5)
Atlast, t-> next = NULL
i.e 5->6->1->2->3->4->NULL

Función:

Node *appendNNodes(Node* head, int n){
// Two pointers, one for traversal and
// other for finding the new head of LL
Node *temp = head, *t = head;
//index maintained for finding new head
int i = -n;
while(temp->next!=NULL){
//When temp went forward n nodes from t
if(i>=0){
t = t->next;
}
temp = temp ->next;
i++;
}
//Connecting the tail to head
temp->next = head;
//Assigning the new node
head = t->next;
//Deleting the previous connection
t->next = NULL;
return head;
}

C ++ Code:

#include<bits/stdc++.h>
using namespace std;
struct Node{// linked list Node
int data;
Node * next;
};
Node *newNode(int k){ //defining new node
Node *temp = (Node*)malloc(sizeof(Node));
temp->data = k;
temp->next = NULL;
return temp;
}
//Used to add new node at the end of the list
Node *addNode(Node* head, int k){
if(head == NULL){
head = newNode(k);
}
else{
Node * temp = head;
Node * node = newNode(k);
while(temp->next!= NULL){
temp = temp->next;
}
temp-> next = node;
}
return head;
}
// Used to create new linked list and return head
Node *createNewLL(){
int cont = 1;
int data;
Node* head = NULL;
while(cont){
cout<<"Enter the data of the Node"<<endl;
cin>>data;
head = addNode(head,data);
cout<<"Do you want to continue?(0/1)"<<endl;
cin>>cont;
}
return head;
}
//To print the Linked List
void *printLL(Node * head){
while(head!= NULL){
cout<<head->data<<"->";
head = head-> next;
}
cout<<"NULL"<<endl;
}
//Function
Node *appendNNodes(Node* head, int n){
// Two pointers, one for traversal and
// other for finding the new head of LL
Node *temp = head, *t = head;
//index maintained for finding new head
int i = -n;
while(temp->next!=NULL){
//When temp went forward n nodes from t
if(i>=0){
t = t->next;
}
temp = temp ->next;
i++;
}
//Connecting the tail to head
temp->next = head;
//Assigning the new node
head = t->next;
//Deleting the previous connection
t->next = NULL;
return head;
}
//Driver Main
int main(){
Node * head = createNewLL();
cout<<"The linked list is"<<endl;
printLL(head);
int data;
cout<<"Enter the number of nodes you want to append."<<endl;
cin>>data;
head = appendNNodes(head,data);
cout<<"The new Linked List is" <<endl;
printLL(head);
return 0;
}

salida

Enter the data of the Node
1
Do you want to continue?(0/1)
1
Enter the data of the Node
2
Do you want to continue?(0/1)
1
Enter the data of the Node
3
Do you want to continue?(0/1)
1
Enter the data of the Node
4
Do you want to continue?(0/1)
1
Enter the data of the Node
5
Do you want to continue?(0/1)
1
Enter the data of the Node
6
Do you want to continue?(0/1)
1
Enter the data of the Node
7
Do you want to continue?(0/1)
0
The linked list is
1->2->3->4->5->6->7->NULL
Enter the number of nodes you want to append.
3
The new Linked List is
5->6->7->1->2->3->4->NULL


Deja un comentario

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