Solution: 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:
Đây là một bài toán tầm thường nhìn là biết kết quả chỉ cần thấy 1 nhân 2 rồi cộng với giá trị của bit hiện tại.
Nhưng có một cách hay hơn là dùng bitwise với 2 toán tử << và |. Tính chất của hai cái này tương tự như đã nói ở trên, << tương đương với nhân 2, còn | thì nó sẽ + 1 nếu là 1 và + 0 nếu là 0. ví dụ : 2 (thập phân) | 1 (thập phân) -> 10 (nhi phân) | 01 (nhị phân) -> 11.
Source code:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: int getDecimalValue(ListNode* head) { int res = 0; while (head){ res = (res<<1) | head->val; head = head->next; } return res; } };
Nhận xét
Đăng nhận xét