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

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

10个月前 (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范围内)
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

内容简介本文详细解析了力扣第44题"寻找两个正序数组的中位数"的合并排序解法。通过双指针技术合并两个有序数组,然后直接计算合并后数组的中位数。虽然时间复杂度为O(m+n),但这种方...

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

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

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

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

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

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

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

一、题目解读洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。二...

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

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

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

牛客NC67题解:汉诺塔递归算法与解题步骤

牛客NC67题解:汉诺塔递归算法与解题步骤

一、题目解读牛客NC67题要求解决汉诺塔问题,这是一个经典的递归算法题目。题目给定整数n,代表汉诺塔中的盘子数量,需要输出将n个盘子从起始柱移动到目标柱的所有步骤。汉诺塔问题规则为:每次只能移动一个盘...

发表评论

访客

看不清,换一张

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