1290. Convert Binary Number in a Linked List to Integer
Given head
which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. The linked list holds the binary representation of a number.
Return the decimal value of the number in the linked list.
Example 1:
Input: head = [1,0,1]
Output: 5
Explanation: (101) in base 2 = (5) in base 10
Example 2:
Input: head = [0]
Output: 0
Example 3:
Input: head = [1]
Output: 1
Example 4:
Input: head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
Output: 18880
Example 5:
Input: head = [0,0]
Output: 0
Constraints:
- The Linked List is not empty.
- Number of nodes will not exceed
30
. - Each node’s value is either
0
or1
.
Solution
class Solution:
def getDecimalValue(self, head: ListNode) -> int:
result = 0
while head:
result = (result << 1) | head.val
head = head.next
return result
In this solution we have an integer, result
, in which we store our current result. As we loop through each node in the linked list, we take the bit value at each node and update our result accordingly.
The algorithm goes like this:
- For each node in the list
- Left Shift
result
by 1 bit to make space for the new bit value - Set result equal to
result OR new_bit
- Update our current node and move to the next one
- Left Shift
- When we’re finished, return our result.
Notes
Blog is back! Going to be posting more.