https://leetcode.com/problems/convert-binary-number-in-a-linked-list-to-integer/ | Easy |
---|
Дан односвязный список, в котором хранятся только 0 и 1. Каждый узел представляет собой один бит числа. Необходимо преобразовать двоичное число, представленное списком, в целое десятичное число.
Input:
head = [1, 0, 1]Output:
5Explanation:
(1 * 2²) + (0 * 2¹) + (1 * 2⁰) = 5
Input:
head = [0]Output:
0
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
fun getDecimalValue(head: ListNode?): Int {
var num = 0
var current = head
while (current != null) {
num = num * 2 + current.`val` // Сдвигаем число влево и добавляем текущий бит
current = current.next
}
return num
}
O(n), где n — число узлов в списке.
O(1), так как используется постоянное количество памяти.