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

【連結串列】二進位制連結串列轉整數

技術標籤:LeetCode

題目

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

解法

兩趟遍歷

先用一趟遍歷獲取連結串列長度
再遍歷計算每個節點的值

 public int getDecimalValue(ListNode head) {
        ListNode cur = head;
        int count = 0;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        cur = head;
        count--;
        int sum = 0;
        while (cur != null)
{ sum += cur.val << count; cur = cur.next; count--; } return sum; }

一趟遍歷

總體思路很簡單,就是利用位移運算進行運算,大概原理如下:
當一個數進行左移或右移時候,如果是正數的情況下,空位補0,如下所展示:
10 左移一位置,那麼就變成 100,利用這個性質,結合這個題目,我們可知道如果將位移後出現的空位再加上我們所獲得的值,就可以計算出對應的十進位制

    public int getDecimalValue
(ListNode head) { int sum = 0; while (head != null) { sum = sum << 1; sum += head.val; head = head.next; } return sum; }