本题我用了两种方法,一种就是大家都可以想到的计算链表长度,确定转换时候的最高阶,第二种是我在搜索这一题时候发现的另一个博主写的
原贴点此
我进行整理了,正好我C语言按位运算没学好,趁这个机会学习一下
法1:
class Solution {
public:
int getDecimalValue(ListNode* head) {
int result = 0;
int i = 0;
int len = 0;
double a = 2.0;
ListNode *p = head;
while(p!=NULL)
{
len++;
p = p->next;
}
while(head!=NULL)
{
len--;
result = result + (head->val)*pow(a,len);
head = head->next;
}
return result;
}
};
法2:
class Solution {
public:
int getDecimalValue(ListNode* head) {
int result = 0;
int i = 0;
while(head!=NULL)
{
result = (result<<1) | head->val;
head = head->next;
}
return result;
}
};
两种方法时间复杂度差不多,执行时间和内存占用在Leetcode上也差不多
以下是关于按位运算的笔记,也看了另一位博主的帖子学习,我主要对左移右移运算符不太熟悉
原贴点此