Every day a leetcode
题目来源:1290. 二进制链表转整数
解法1:模拟
遍历2次,第一次统计长度,确定阶数。第二次求和sum。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int getDecimalValue(struct ListNode* head){
int sum=0;
int len=-1;
struct ListNode* p=head;
while(p)
{
p=p->next;
len++;
}
p=head;
while(p)
{
sum+=(int)p->val*pow(2,len--);
p=p->next;
}
return sum;
}
结果:

解法2:模拟
按照下面的规则,只需要遍历1次:
- 每读取链表的一个节点值,可以认为读到的节点值是当前二进制数的最低位;
- 当读到下一个节点值的时候,需要将已经读到的结果乘以 2,再将新读到的节点值当作当前二进制数的最低位;
- 如此进行下去,直到读到了链表的末尾。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int getDecimalValue(struct ListNode* head){
int ans=0;
struct ListNode* p=head;
while(p)
{
ans=2*ans+p->val;
p=p->next;
}
return ans;
}
结果:

本文介绍了两种不同的方法将二进制链表转换为十进制整数。解法一通过两次遍历计算长度和求和,解法二则在一次遍历中完成转换。这两种方法都提供了简洁的代码实现,并给出了相应的运行结果。
391

被折叠的 条评论
为什么被折叠?



