Javascript Program To Find Decimal Equivalent Of Binary Linked List
Last Updated :
22 Feb, 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.
Javascript
<script>
class Node
{
constructor()
{
this .data = true ;
this .next = null ;
}
}
function decimalValue(head)
{
var res = 0;
while (head != null )
{
res = (res << 1) +
(head.data ? 1 : 0);
head = head.next;
}
return res;
}
function newNode(data)
{
var temp = new Node();
temp.data = (data == 1 ?
true : false );
temp.next = null ;
return temp;
}
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));
</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
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;
}
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!
Share your thoughts in the comments
Please Login to comment...