Open In App

Javascript Program To Find Decimal Equivalent Of Binary Linked List

Last Updated : 22 Feb, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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.

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 is 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.

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:

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));


Output

Decimal Value is : 11

Time Complexity: O(N) where N is the number of nodes in linked list.
Auxiliary Space: O(1)

Please refer complete article on Decimal Equivalent of Binary Linked List for more details!



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads