1. 程式人生 > 其它 >力扣 1290. 二進位制連結串列轉整數

力扣 1290. 二進位制連結串列轉整數

技術標籤:力扣刷題

給你一個單鏈表的引用結點 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。

每個結點的值不是 0 就是 1。

/**
 * 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; } };