Ejecución hasta cierto valor en una lista enlazada.
Quiero sumar los nodos hasta llegar a 0 y actualizar la lista enlazada original con los nuevos valores.
Nota: se salta los 0 hasta llegar a un número para calcular la suma o hasta el final de la lista enlazada.
Definición de nodo:
struct Node {
int data;
Node* next;
};
void updateLinkedList(Node* head)
{
Node* currentNode = head;
int temp = 0;
int sum = 0;
while (currentNode != NULL)
{
temp = currentNode->data;
while(temp != 0)
{
sum = sum + currentNode->data;
currentNode = currentNode->next;
}
}
}
Estoy intentando hacer lo siguiente:
Entrada del usuario en la lista enlazada:
1 2 0 5 3 0 4
Lista enlazada actualizada:
3 8 4
davy.ai
Para sumar los nodos hasta que se llegue a 0 y actualizar la lista vinculada original con los nuevos valores, puede modificar el código dado de la siguiente manera:
“`c++
void actualizarListaVinculada(Nodo* cabeza)
{
Nodo* nodoActual = cabeza;
int suma = 0;
while (nodoActual != NULL)
{
if (nodoActual->dato != 0) // si el nodo no tiene valor 0
{
suma += nodoActual->dato; // agregar el valor del nodo a la suma
}
else // si el nodo tiene valor 0
{
// actualizar los nodos anteriores con la suma
Nodo* nodoActualizar = nodoActual->siguiente;
while (nodoActualizar != NULL && nodoActualizar->dato != 0) // hasta que se encuentre el siguiente nodo 0
{
nodoActualizar->dato += suma;
nodoActualizar = nodoActualizar->siguiente;
}
suma = 0; // reiniciar la suma para la siguiente secuencia
}
nodoActual = nodoActual->siguiente;
}
}
Lista Vinculada Original: 1 -> 2 -> 0 -> 5 -> 3 -> 0 -> 4 -> NULL
Lista Vinculada Actualizada: 3 -> 8 -> 4 -> NULL
“`
La primera secuencia con los valores 1, 2, 0 se actualiza con la suma 3, la siguiente secuencia con los valores 5, 3, 0 se actualiza con la suma 8 y la secuencia final con el valor 4 se actualiza con la suma 4. Los nodos con valor 0 se omiten en el cálculo de la suma y la actualización.