(49)二进制链表转整数

文章目录

  • 每日一言
  • 题目
  • 解题思路
  • 代码
  • 结语


每日一言

人生这条路很长,未来如星辰大海般璀璨,不必踟躇与过去的半亩方塘。那些所谓的遗憾,可能是一种成长;那些曾受过的伤,终会化作照亮前路的光。


题目

题目链接:二进制链表转整数

给你一个单链表的引用结点 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。


解题思路

假如在123后面还有个5,要得到正确结果肯定要这样算:123*10+5
把十进制换成二进制就OK了(用左移运算符)

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
int getDecimalValue(struct ListNode* head) {
    int ret = 0;
    
    while(head)
    {
        ret = (ret<<1) + head->val;
        head = head->next;
    }

    return ret;
}

结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


你可能感兴趣的:(你必须要会的C语言练习题,C语言,链表,学习,c语言)