Decimal Equivalent of Binary Linked List
Last Updated :
28 Dec, 2023
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>
OutputDecimal 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.
Another Approach(by reversing the Linked List):
Follow the below steps to solve the given problem
1) First reverse the given linked list.
2) Initialize a ans variable to store ans and pos variable to keep track of position of node in linked list.
3) Perform the operation ans = ans + (rhead.data*(2**pos))%MOD)
4) perform ans = ans%MOD
Below is the implementation of above approach:
C++
#include<bits/stdc++.h>
using namespace std;
// C++ Program to find decimal value
// of binary linked list
// node structure
struct Node{
int data;
Node* next;
Node(int data){
this->data = data;
this->next = NULL;
}
};
long long unsigned int power(int num,int count){
if(count ==0) return 1;
if(count%2==0)
return (power(num,count/2)%1000000007)*(power(num,count/2)%1000000007);
else
return num*(power(num,count/2)%1000000007)*(power(num,count/2)%1000000007);;
}
Node* reverse(Node* head){
if(head == NULL || head->next == NULL) return head;
Node* curr = head;
Node* prev = NULL;
Node* nxt = head->next;
while(nxt != NULL){
curr->next = prev;
prev = curr;
curr = nxt;
nxt = nxt->next;
}
curr->next = prev;
return curr;
}
int decimalValue(Node* head){
int MOD = 1000000007;
Node* rhead = reverse(head);
int ans = 0;
int pos = 0;
while(rhead != NULL){
ans = (ans%MOD + ((rhead->data)*power(2,pos)) % MOD) % MOD;
rhead = rhead->next;
pos++;
}
return ans;
}
int main(){
Node* head = new Node(1);
head->next = new Node(0);
head->next->next = new Node(1);
head->next->next->next = new Node(1);
cout<<"Decimal Value is : "<<decimalValue(head);
}
Java
// Java implementation to find non-leaf
// count of a given Binary tree
import java.util.*;
// class to represent the tree node
class Node{
public int data;
public Node next;
public Node(int item){
data = item;
next = null;
}
}
public class LinkedList{
static int power(int num, int count){
if(count ==0) return 1;
if(count % 2 ==0)
return (power(num,count/2)%1000000007)*(power(num,count/2)%1000000007);
else
return num*(power(num,count/2)%1000000007)*(power(num,count/2)%1000000007);
}
static Node reverse(Node head){
if(head == null || head.next == null) return head;
Node curr = head;
Node prev = null;
Node nxt = head.next;
while(nxt != null){
curr.next = prev;
prev = curr;
curr = nxt;
nxt = nxt.next;
}
curr.next = prev;
return curr;
}
static int decimalValue(Node head){
Node rhead = reverse(head);
int ans = 0;
int pos = 0;
while(rhead != null){
ans = (ans % 1000000007 + ((rhead.data)*((int)power(2,pos))) % 1000000007) % 1000000007;
rhead = rhead.next;
pos++;
}
return ans;
}
// driver code to test above function
public static void main(String args[]){
Node head = new Node(1);
head.next = new Node(0);
head.next.next = new Node(1);
head.next.next.next = new Node(1);
// function call
System.out.println("Decimal Value is : " + decimalValue(head));
}
}
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
def reverse(head):
if(head == None or head.next == None):
return head
curr = head
prev = None
nxt = head.next
while(nxt):
curr.next = prev
prev = curr
curr = nxt
nxt = nxt.next
curr.next = prev
return curr
def decimalValue(head):
MOD=10**9+7
rhead = reverse(head)
ans = 0
pos = 0
while rhead:
ans = (ans % MOD+(rhead.data*(2**pos)) % MOD) % MOD
rhead = rhead.next
pos += 1
return ans
head = Node(1)
head.next = Node(0)
head.next.next = Node(1)
head.next.next.next = Node(1)
print("Decimal Value is :", end =" ")
print(decimalValue(head))
# THIS CODE IS CONTRIBUTED BY YASH AGARWAL(YASHAGARWAL2852002)
C#
using System;
// C# Program to find decimal value
// of binary linked list
class GFG{
public class Node{
public int data;
public Node next;
public Node(int data){
this.data = data;
this.next = null;
}
}
static int power(int num, int count){
if(count == 0) return 1;
if(count%2==0)
return (power(num,count/2)%1000000007)*(power(num,count/2)%1000000007);
else
return num*(power(num,count/2)%1000000007)*(power(num,count/2)%1000000007);
}
static Node reverse(Node head){
if(head == null || head.next == null) return head;
Node curr = head;
Node prev = null;
Node nxt = head.next;
while(nxt != null){
curr.next = prev;
prev = curr;
curr = nxt;
nxt = nxt.next;
}
curr.next = prev;
return curr;
}
static int decimalValue(Node head){
int MOD = 1000000007;
Node rhead = reverse(head);
int ans = 0;
int pos = 0;
while(rhead != null){
ans = (ans%MOD + ((rhead.data)*power(2,pos)) % MOD) % MOD;
rhead = rhead.next;
pos++;
}
return ans;
}
public static void Main(){
Node head = new Node(1);
head.next = new Node(0);
head.next.next = new Node(1);
head.next.next.next = new Node(1);
Console.WriteLine("Decimal Value is : " + decimalValue(head));
}
}
JavaScript
// JavaScript program to find the decimal value
// of binary linked list
// node class
class Node{
constructor(data){
this.data = data;
this.left = null;
this.right = null;
}
}
function reverse(head){
if(head == null || head.next == null) return head;
let curr = head;
let prev = null;
let nxt = head.next;
while(nxt != null){
curr.next = prev;
prev = curr;
curr = nxt;
nxt = nxt.next;
}
curr.next = prev;
return curr;
}
function decimalValue(head){
let MOD = 1000000007;
let rhead = reverse(head);
let ans = 0;
let pos = 0;
while(rhead != null){
ans = (ans % MOD+(rhead.data*(2**pos)) % MOD) % MOD;
rhead = rhead.next;
pos += 1;
}
return ans;
}
// driver program to test above function
let head = new Node(1);
head.next = new Node(0);
head.next.next = new Node(1);
head.next.next.next= new Node(1);
console.log("Decimal Value is : " + decimalValue(head));
OutputDecimal Value is : 11
Time Complexity: O(N) where N is the number of nodes in linked list.
Auxiliary Space: O(1)
Similar Reads
Javascript Program To Find Decimal Equivalent Of Binary Linked List Given a singly linked list of 0s and 1s find its decimal equivalent.Input: 0->0->0->1->1->0->0->1->0Output: 50 Input: 1->0->0Output: 4The decimal value of an empty linked list is considered as 0.Initialize the result as 0. Traverse the linked list and for each node, mul
3 min read
Memory efficient doubly linked list We need to implement a doubly linked list with the use of a single pointer in each node. For that we are given a stream of data of size n for the linked list, your task is to make the function insert() and getList(). The insert() function pushes (or inserts at the beginning) the given data in the li
9 min read
Split a Circular Linked List into two halves Given a Circular linked list. The task is split into two Circular Linked lists. If there are an odd number of nodes in the given circular linked list then out of the resulting two halved lists, the first list should have one node more than the second list.Examples:Input: 10->4->9Output: 10-
10 min read
Bitonic point in the given linked list Given a linked list with distinct elements, the task is to find the bitonic point in the given linked list. If there is no such point then print -1. Examples: Input: 1 -> 2 -> 3 -> 4 -> 3 -> 2 -> 1 -> NULL Output: 4 1 -> 2 -> 3 -> 4 is strictly increasing. 4 -> 3 -
7 min read
Find Length of a Linked List (Iterative and Recursive) Given a Singly Linked List, the task is to find the Length of the Linked List.Examples:Input: LinkedList = 1->3->1->2->1Output: 5Explanation: The linked list has 5 nodes.Input: LinkedList = 2->4->1->9->5->3->6Output: 7 Explanation: The linked list has 7 nodes.Input: Lin
11 min read
Count Zero filled Subarrays in a Binary Linked list Given a binary linked list that consists of the 1s and 0s nodes, the task is to find the number of zero-filled subarrays in the linked list. A zero-filled subarray is a contiguous subarray of nodes containing all zeroes. Examples: Input: List = 1->0->1->0->0->1->0Output: 5Explanati
12 min read
Check Contiguous 1s Sequence in Binary Linked List Given a binary linked list and integer K, the task is to check whether the binary linked list contains a contiguous sequence of 1s of K length. Examples: Input: 0 -> 1 -> 1 -> 1 -> 0 -> 1 -> 1 -> 0 -> 1 -> 1, K = 3Output: TrueExplanation: In the given binary linked list, t
9 min read
Sort given Binary Doubly Linked List without modifying the data Given a head and a tail of a doubly linked list containing 0s and 1s, the task is to sort the Doubly linked list without modifying the data. Examples: Input: head = 1->1->0->0->1->0->1->1->0->0->NULLOutput: 0->0->0->0->0->1->1->1->1->1->NUL
11 min read
Decimal to binary number using recursion Given a decimal number as input, we need to write a program to convert the given decimal number into an equivalent binary number. Examples : Input: d = 7 Output: 111Explanation: 20 + 21 + 22 = 1+2+4 = 7.Input: d = 10Output: 1010Explanation: 21 + 23 = 2+8 = 10.We previously discussed an iterative app
4 min read
Sort a Linked List of 0s and 1s Given the singly Linked List of size n, consisting of binary integers 0s and 1s, the task is to sort the given linked list.Examples:Input: head = 1 -> 0 -> 1 -> 0 -> 1 -> NULL Output: 0 -> 0 -> 1 -> 1 -> 1 -> NULLInput: head = 1 -> 1 -> 0 -> NULL Output: 0 -
13 min read