Programa C++ para encontrar el equivalente decimal de la lista enlazada binaria

Dada una lista unida de 0 y 1, encuentre su equivalente decimal.

Input: 0->0->0->1->1->0->0->1->0
Output: 50   

Input: 1->0->0
Output: 4

El valor decimal de una lista enlazada vacía se considera 0.

Inicialice el resultado como 0. Recorra la lista enlazada y, para cada Node, multiplique el resultado por 2 y agréguele los datos del Node.

C++

// C++ Program to find decimal value
// of binary linked list
#include <bits/stdc++.h>
using namespace std;
 
// Link list Node
class Node
{
    public:
    bool data;
    Node* next;
};
 
/* Returns decimal value of binary
   linked list */
int decimalValue(Node *head)
{
    // Initialized result
    int res = 0;
 
    // Traverse linked list
    while (head != NULL)
    {
        // Multiply result by 2 and
        // add head's data
        res = (res << 1) + head->data;
 
        // Move next
        head = head->next;
    }
    return res;
}
 
// Utility function to create a
// new node.
Node *newNode(bool data)
{
    Node *temp = new Node;
    temp->data = data;
    temp->next = NULL;
    return temp;
}
 
// Driver code
int main()
{
    // Start with the empty list
    Node* head = newNode(1);
    head->next = newNode(0);
    head->next->next = newNode(1);
    head->next->next->next = newNode(1);
    cout << "Decimal value is " <<
             decimalValue(head);
    return 0;
}
// This is code is contributed by rathbhupendra

Producción : 

Decimal value is 11

Complejidad de tiempo: O(n) donde n es el número de Nodes en la lista enlazada dada.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.

Consulte el artículo completo sobre el equivalente decimal de la lista vinculada binaria 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 *