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

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

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


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣198.打家劫舍|动态规划解法中的特殊边界处理

力扣198.打家劫舍|动态规划解法中的特殊边界处理

题意解析:在排列成直线的房屋群中,每个房屋藏有价值不同的财物。小偷不能连续抢劫相邻的两间房屋,否则会触发警报。我们需要设计一套抢劫策略,使得在不触发警报的前提下,能够获取的最大财物总和。这个问题本质上...

力扣540题:线性扫描法如何高效定位唯一数

力扣540题:线性扫描法如何高效定位唯一数

题目重解一个严格递增的有序数组中,除某个元素外,其余每个元素均出现两次。这个看似简单的条件背后隐藏着巧妙的规律——单一元素会打破数组的"成对对称性"。题目要求以O(log n)时间...

手把手教你实现头插法树:从代码到原理的深度解析

一、简介和特点头插法树是一种基于链表实现的树形数据结构,其核心思想是通过链表头插法管理节点的孩子节点。在本文的代码示例中,我们使用C++模板类实现了树结构,每个树节点(treenode<T>...

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

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

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

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

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

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

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

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

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

发表评论

访客

看不清,换一张

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