力扣 1290. 二進位制連結串列轉整數
阿新 • • 發佈:2020-12-10
技術標籤:力扣刷題
給你一個單鏈表的引用結點 head。連結串列中每個結點的值不是 0 就是 1。已知此連結串列是一個整數數字的二進位制表示形式。
請你返回該連結串列所表示數字的 十進位制值 。
示例 1:
輸入:head = [1,0,1]
輸出:5
解釋:二進位制數 (101) 轉化為十進位制數 (5)
示例 2:
輸入:head = [0]
輸出:0
示例 3:
輸入:head = [1]
輸出:1
示例 4:
輸入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
輸出:18880
示例 5:
輸入:head = [0,0]
輸出:0
提示:
連結串列不為空。
連結串列的結點總數不超過 30。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int getDecimalValue(ListNode* head) {
if(head==NULL)
return 0;
ListNode* p=head;
int sum=0;
while(p){
sum=sum*2+p->val;
p=p->next;
}
return sum;
}
};
位運算更快
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int getDecimalValue(ListNode* head) {
if(head==NULL)
return 0;
ListNode* p=head;
int sum=0;
while(p){
sum=(sum<<1);
sum|=p->val;
p=p->next;
}
return sum;
}
};