想法:参考上面这个例子。利用bitwise operator中的左移(<<)和或者(|)。先建立一个十进制数字0,然后左移1位(0<<1),变成00(二进制表示)。head指针目前指向1,我们利用或者(|),把00变成01(00|01 = 01)。head指针向后移动一位。
或者(|)的操作方法如下图。
接着,我们继续左移1位(01<<1),变成010。head指针目前指向0,进行或者(|)操作之后,仍然是010(010|000=010)。head指针向后移动一位。
最后,我们继续左移1位(010<<1 = 0100)。head指针目前指向1,进行或者(|)操作之后,变成0101(0100|0001 = 0101),也就是5。
注意,这里最后得出的答案是一个十进制数,因为我们以上的所有操作都是开始于一个十进制数0。
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def getDecimalValue(self, head: ListNode) -> int:
res = 0
while head:
res = (res << 1) | head.val
head = head.next
return res