Skip to content
Related Articles
Open in App
Not now

Related Articles

Decimal Equivalent of Binary Linked List

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 20 Jan, 2023
Improve Article
Save Article

Given a singly linked list of 0s and 1s find its decimal equivalent.

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

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

The decimal value of an empty linked list is considered as 0.

Initialize the result as 0. Traverse the linked list and for each node, multiply the result by 2 and add the node’s data to it.

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 program to test above function*/
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

C




// C Program to find decimal value of
// binary linked list
#include<iostream>
using namespace std;
 
/* Link list Node */
struct Node
{
    bool data;
    struct Node* next;
};
 
/* Returns decimal value of binary linked list */
int decimalValue(struct 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)
{
    struct Node *temp = new Node;
    temp->data = data;
    temp->next = NULL;
    return temp;
}
 
/* Driver program to test above function*/
int main()
{
    /* Start with the empty list */
    struct 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;
}

Java




// Java Program to find decimal value of
// binary linked list
class GFG
{
     
// Link list Node /
static class Node
{
    boolean data;
    Node next;
};
 
// Returns decimal value of binary linked list /
static 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?1:0);
 
        // Move next
        head = head.next;
    }
    return res;
}
 
// Utility function to create a new node.
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = (data==1? true:false);
    temp.next = null;
    return temp;
}
 
// Driver code/
public static void main(String args[])
{
    // Start with the empty list /
    Node head = newNode(1);
    head.next = newNode(0);
    head.next.next = newNode(1);
    head.next.next.next = newNode(1);
 
    System.out.print( "Decimal value is "+decimalValue(head));
}
}
 
// This code is contributed by Arnab Kundu

Python3




# Python3 program to find decimal value
# of binary linked list
 
# Node Class
class Node:
     
    # Function to initialise the
    # node object
    def __init__(self, data):
         
        # Assign data
        self.data = data
         
        # Initialize next as null
        self.next = None
 
# Linked List class contains
# a Node object
class LinkedList:
 
    # Function to initialize head
    def __init__(self):
         
        self.head = None
 
    # Returns decimal value of binary
    # linked list
    def decimalValue(self, head):
         
        # Initialized result
        res = 0
 
        # Traverse linked list
        while head:
 
            # Multiply result by 2 and
            # add head's data
            res = (res << 1) + head.data
 
            # Move Next
            head = head.next
             
        return res
 
# Driver code
if __name__ == '__main__':
 
    #Start with the empty list
    llist = LinkedList()
 
    llist.head = Node(1)
    llist.head.next = Node(0)
    llist.head.next.next = Node(1)
    llist.head.next.next.next = Node(1)
     
    print("Decimal Value is {}".format(
           llist.decimalValue(llist.head)))
 
# This code is contributed by Mohit Jangra

C#




// C# Program to find decimal value of
// binary linked list
using System;
 
class GFG
{
     
// Link list Node /
public class Node
{
    public Boolean data;
    public Node next;
};
 
// Returns decimal value of binary linked list
static 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 ? 1 : 0);
 
        // Move next
        head = head.next;
    }
    return res;
}
 
// Utility function to create a new node.
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = (data == 1 ? true : false);
    temp.next = null;
    return temp;
}
 
// Driver code
public static void Main(String []args)
{
    // Start with the empty list
    Node head = newNode(1);
    head.next = newNode(0);
    head.next.next = newNode(1);
    head.next.next.next = newNode(1);
 
    Console.WriteLine("Decimal value is " +
                       decimalValue(head));
}
}
 
// This code is contributed by Rajput-Ji

Javascript




<script>
 
// Javascript Program to find decimal value of
// binary linked list    
// Link list Node /
     class Node {
         constructor(){
         this.data = true;
         this.next = null;
    }
    }
 
    // Returns decimal value of binary linked list /
    function decimalValue(head) {
        // Initialized result
        var res = 0;
 
        // Traverse linked list
        while (head != null) {
            // Multiply result by 2 and add
            // head's data
            res = (res << 1) + (head.data ? 1 : 0);
 
            // Move next
            head = head.next;
        }
        return res;
    }
 
    // Utility function to create a new node.
    function newNode(data) {
var temp = new Node();
        temp.data = (data == 1 ? true : false);
        temp.next = null;
        return temp;
    }
 
    // Driver code/
     
        // Start with the empty list /
var head = newNode(1);
        head.next = newNode(0);
        head.next.next = newNode(1);
        head.next.next.next = newNode(1);
 
        document.write("Decimal value is "
        + decimalValue(head));
 
// This code contributed by aashish1995
 
</script>

Output

Decimal value is 11

Time Complexity: O(n) where n is the number of nodes in the given linked list.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

This article is contributed by Shivam Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!