因为链表结构的二进制数是从高位数往低位数计数的,所以与从低位开始转换的算法不同。
代码如下:
ListNode* cur = head;
int ans = 0;
while (cur != nullptr) {
ans = ans * 2 + cur->val;
cur = cur->next;
}
以[1,0,1]为例子,上式最终结果为:
(1 x 2 + 0) x 2 + 1 = (1 x 2 ^ 2 + 0 x 2 ^ 1 + 1 x 2 ^ 0)