当前位置:首页 > 力扣 > 线性遍历+二进制 6行代码征服二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数

5个月前 (05-17)

力扣1290.二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数 算法 C++ 迭代 模拟 进制转换 链表 单链表 数据结构 第1张

题目本质

给定一个单链表的头节点head,链表中每个节点的值为0或1。链表表示一个‌最高有效位在前‌的二进制数字,要求将其转换为对应的十进制整数。例如链表1→0→1对应的二进制数是101,应返回十进制数5。


解题思路与推导过程

一、算法核心思想

  1. ‌1.二进制数构造规则‌:

    • 每个新节点的值相当于二进制数‌向左移位‌后的最低位

    • 例如遍历到第三个节点时,计算过程相当于(前值<<1) | 当前值

  2. ‌2.累加计算‌:

    • 初始化sum=0作为累加结果

    • 每次循环执行sum = sum*2 + 当前节点值(等价于位运算sum<<1 | val

  3. 3‌.遍历特性‌:

    • 无需反转链表,直接按照遍历顺序处理

    • 时间复杂度O(n),空间复杂度O(1)

二、代码流程解析

  • ‌1.初始化‌:sum=0作为十进制结果的容器

  • ‌2.循环处理每个节点‌:

    1. sum = sum*2:将之前的结果左移一位(二进制进位)

    2. +head->val:将当前位的二进制值加入最低位

    3. head=head->next指针后移处理下一位

  • 3‌.终止条件‌:链表指针指向NULL时结束遍历

三、潜在问题与解决方案

  • 大数溢出‌:使用long long类型存储中间结果(题目保证链表长度≤30,long long足够存储2^30量级的数值)

  • 头节点为空的边界情况‌:题目约束链表非空,无需额外判断1


代码+注释

class Solution {
public:
    int getDecimalValue(ListNode* head) {
        long long sum=0; // 使用long long避免中间计算溢出
        while(head)      // 遍历直到链表末尾
        {
            // 核心计算公式:每次将之前结果左移一位,并加上当前二进制位
            sum = (long long)sum*2 + head->val; 
            
            // 类型转换说明:防止sum超过int范围时的计算错误
            head = head->next; // 指针后移处理下个节点
        }
        return sum; // 最终结果自动转为int(题目保证数值在int范围内)
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

力扣1472题解:浏览器历史记录模拟(C++代码实现与详细解析)

力扣1472题解:浏览器历史记录模拟(C++代码实现与详细解析)

一、题目解读力扣1472题要求设计一个“浏览器历史记录”类,支持以下功能:    1. 初始化浏览器,指定首页URL;   &nb...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

一、题目解读力扣3112题要求解决带时间限制的最短路径问题:给定一个有向图,节点具有消失时间,需计算从起点到各节点的最短路径,且路径总时间不能超过节点的消失时间。题目难点在于需在传统最短路径算法(如D...

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

一、题目解读洛谷1220题要求计算在n个位置放置灯的情况下,通过关闭连续区间灯并移动至区间端点,使得总耗电量最小。需考虑灯的功率与位置差异,设计高效的算法求解最优策略。二、解题思路1. 动态规划 +...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。