DEV Community

Sivakumar
Sivakumar

Posted on • Edited on

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

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.
Enter fullscreen mode Exit fullscreen mode
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.
Enter fullscreen mode Exit fullscreen mode
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)
    }
}
Enter fullscreen mode Exit fullscreen mode

Please feel free to share your feedback.

Happy reading!!!

Top comments (0)