首页 > 技术文章 > 【链表】leetcode-1290-二进制链表转整数

masterYHH 2020-12-05 21:04 原文

leetcode-1290-二进制链表转整数

题目描述

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。
请你返回该链表所表示数字的 十进制值 。

初步思路

1.遍历链表,求出表长;
2.利用for循环在遍历时确定条件,即当结点数据域值为1进行运算;
3。找出十进制和二进制之间的关系,确定运算方程。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


int getDecimalValue(struct ListNode* head){
    int i = 0;
    int sum = 0;
    struct ListNode* p = head;
    while(p)
    {
        p = p->next;
        i++;
    }
    for(int j = 0;j <= i-1;j++)
    {
       
       if(head->val == 1)
       {
           int a = pow(2,i-1-j);
           sum += a;
       }
       head = head->next;
       
    }
    return sum;
}

改进

既然想到了遍历,那么在进行while循环时实际上就可以得出结果了,刚做题脑子抽了。。就想用for循环就先求表长,在求解数学关系,实际上更简单。

int getDecimalValue(ListNode* head) {
       struct ListNode* p = head;
        int sum = 0;
        while (p != NULL) {
            sum = sum * 2 + p->val;
            p = p->next;
        }
        return sum;
    }


总结:本题本身简单,只是刚开始容易想歪,一开始想用总结点数和二进制方法结合列方程,似乎着眼更细方法更简单,学习了。

推荐阅读