DEV Community is a community of 643,323 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

loading...

Data Structures & Algorithms using Rust: Convert Binary Number in a Linked List to Integer

Sivakumar
Learning rust
Updated on ・2 min read

As part of Data Structures & Algorithms implementation using Rust, let's see how to solve `Convert Binary Number in a Linked List to Integer` problem.

Leetcode problem link: https://leetcode.com/problems/convert-binary-number-in-a-linked-list-to-integer/

Problem Statement
``````Given head which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. The linked list holds the binary representation of a number.

Return the decimal value of the number in the linked list.
``````
Instructions
``````Example 1:

Input: head = [1,0,1]
Output: 5
Explanation: (101) in base 2 = (5) in base 10

Example 2:

Input: head = [0]
Output: 0

Example 3:

Input: head = [1]
Output: 1

Example 4:

Input: head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
Output: 18880

Example 5:

Input: head = [0,0]
Output: 0

Constraints:

The Linked List is not empty.
Number of nodes will not exceed 30.
Each node's value is either 0 or 1.
``````
Solution

Please find below the solution implemented using Rust

``````// Definition for singly-linked list.
// #[derive(PartialEq, Eq, Clone, Debug)]
// pub struct ListNode {
//   pub val: i32,
//   pub next: Option<Box<ListNode>>
// }
//
// impl ListNode {
//   #[inline]
//   fn new(val: i32) -> Self {
//     ListNode {
//       next: None,
//       val
//     }
//   }
// }
impl Solution {
pub fn get_decimal_value(head: Option<Box<ListNode>>) -> i32 {
let mut iter = head.iter();
let mut v = Vec::new();
loop {
let n = iter.next();
match n {
Some(x) => {
v.push(x.val);
iter = x.next.iter();
},
None => break
};
}
v.iter().fold(0, |acc, &b| acc*2 + b as i32)
}
}
``````

Please feel free to share your feedback.

Happy reading!!!