Giả sử chúng ta có một danh sách được liên kết đơn lẻ. danh sách được liên kết đại diện cho một số nhị phân với hầu hết các chữ số có nghĩa trước tiên, chúng tôi phải trả lại nó dưới dạng số thập phân.
Vì vậy, nếu đầu vào là [1,0,1,1,0], thì đầu ra sẽ là 22
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- l:=một danh sách mới
- trong khi nút không rỗng, hãy thực hiện
- chèn giá trị của nút vào cuối l
- node:=next of node
- k:=0, v:=0
- đối với tôi trong phạm vi kích thước từ l - 1 đến 0, giảm đi 1, thực hiện
- nếu l [i] giống 1, thì
- v:=v + 2 ^ k
- k:=k + 1
- nếu l [i] giống 1, thì
- return v
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head class Solution: def solve(self, node): l = [] while node: l.append(node.val) node=node.next k = 0 v=0 for i in range(len(l)-1,-1,-1): if (l[i]==1): v += (2**k) k+=1 return v ob = Solution() head = make_list([1,0,1,1,0]) print(ob.solve(head))
Đầu vào
[1,0,1,1,0]
Đầu ra
22