给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的十进制值 。
示例 1:
1 | 1->0->1 |
示例 2:
1 | 输入:head = [0] |
示例 3:
1 | 输入:head = [1] |
示例 4:
1 | 输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0] |
示例 5:
1 | 输入:head = [0,0] |
提示:
链表不为空。
链表的结点总数不超过 30。
- 每个结点的值不是 0 就是 1。
方法:一次迭代
假定单链表中存储的二进制数字为$x_1 x_2 \cdots x_n$,其十进制值为
$$
\begin{align}
\mathrm{data}
&= x_1 \times 2^{n-1} + x_2 \times 2^{n-2} + \cdots + x_{n-1} \times 2 + x_n \\
&= 2 \times (x_1 \times 2 ^{n-2} + x_2 \times 2^{n-3} + \cdots + x_{n-1}) + x_n\\
&\cdots \\
&= 2 \times ( \cdots 2 \times (2 \times x_1 + x_2) + x_3 \cdots ) + x_n
\end{align}
$$
因此:
1 | # Definition for singly-linked list. |