The One-Line Trick That Solves LeetCode 1290 in Minutes

Master this essential coding interview problem with our step-by-step approach and optimized C++ solution
Problem Overview
LeetCode Problem 1290 is a fundamental coding interview question that tests your understanding of:
Linked List traversal
Binary number system
Mathematical operations
Bit manipulation concepts
This problem appears frequently in technical interviews at companies like Google, Amazon, and Microsoft, making it essential for any serious programmer to master.
Problem Statement
Given a head
node of a singly-linked list where each node contains either 0
or 1
, convert this binary representation to its decimal equivalent.
Example:
Input: head = [1,0,1]
Output: 5
Explanation: (101) in base 2 = (5) in base 10
Understanding the Challenge
What Makes This Problem Interesting?
Unlike working with arrays or strings, linked lists don't provide random access to elements. This means we can't simply:
Jump to any position
Know the length beforehand
Traverse backwards easily
The key insight is recognizing that we're dealing with a Most Significant Bit (MSB) first representation, which actually makes our solution more elegant.
Binary to Decimal Conversion Basics
Before diving into the solution, let's refresh binary-to-decimal conversion:
Binary: 1 0 1
Powers: 2² 2¹ 2⁰
Values: 4 0 1
Result: 4 + 0 + 1 = 5
The Intuitive Approach
My Thought Process
When I first encountered this problem, I considered several approaches:
Traverse twice: First to find length, then to calculate
Use extra space: Store values in an array
Mathematical trick: Build result incrementally
The third approach turned out to be the most elegant and efficient.
The "Shift and Add" Strategy
The breakthrough came when I realized: every time we encounter a new bit, we can shift our current result left by 1 position and add the new bit.
This is equivalent to:
result = result * 2 + current_bit
Let's trace through an example:
Binary: 1 → 0 → 1
Step 1: result = 0 * 2 + 1 = 1
Step 2: result = 1 * 2 + 0 = 2
Step 3: result = 2 * 2 + 1 = 5
Perfect! We get our answer in a single pass.
Step-by-Step Solution
Algorithm Breakdown
Here's my systematic approach:
Initialize result to 0
Traverse the linked list from head to tail
For each node:
Shift current result left (multiply by 2)
Add the current bit value
Return the final result
Visual Representation
Linked List: [1] → [0] → [1] → null
Iteration 1: result = 0 * 2 + 1 = 1
Iteration 2: result = 1 * 2 + 0 = 2
Iteration 3: result = 2 * 2 + 1 = 5
Final Answer: 5
Code Implementation
Optimized C++ Solution
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
int getDecimalValue(ListNode* head) {
int result = 0; // Initialize result to store decimal value
// Traverse the linked list from head to tail
while (head != nullptr) {
// Shift result left by 1 bit (multiply by 2) and add current bit
result = result * 2 + head->val;
// Move to the next node
head = head->next;
}
return result; // Return the final decimal value
}
};
Code Explanation
Line-by-line breakdown:
int result = 0;
: Start with zero as our basewhile (head != nullptr)
: Continue until we reach the endresult = result * 2 + head->val;
: The magic formula that builds our decimal numberhead = head->next;
: Move to the next nodereturn result;
: Return our calculated decimal value
Complexity Analysis
Time Complexity: O(n)
n = number of nodes in the linked list
We visit each node exactly once
Each operation inside the loop is O(1)
Space Complexity: O(1)
Only using a single integer variable
result
No additional data structures needed
Memory usage doesn't grow with input size
Why This is Optimal
This solution is optimal because:
Minimal time: Single pass through the data
Minimal space: Constant extra memory
Clean code: Easy to understand and maintain
Alternative Approaches
Approach 1: Using Built-in Functions
// Less efficient but more readable
int getDecimalValue(ListNode* head) {
string binary = "";
while (head) {
binary += to_string(head->val);
head = head->next;
}
return stoi(binary, 0, 2);
}
Pros: Very readable Cons: O(n) extra space, slower execution
Approach 2: Recursive Solution
// Recursive approach
int helper(ListNode* head, int& result) {
if (!head) return 0;
int length = helper(head->next, result) + 1;
result += head->val * pow(2, length - 1);
return length;
}
Pros: Demonstrates recursion skills Cons: O(n) stack space, more complex
Why the Iterative Approach Wins
The iterative "shift and add" method is superior because:
Efficiency: O(1) space, O(n) time
Simplicity: Easy to understand and implement
Interview-friendly: Shows mathematical insight
Practice Problems
Related LeetCode Problems
To master this concept, try these similar problems:
[LeetCode 2]: Add Two Numbers - Linked list arithmetic
[LeetCode 19]: Remove Nth Node - Linked list manipulation
[LeetCode 206]: Reverse Linked List - Fundamental linked list operations
[LeetCode 1009]: Complement of Base 10 Integer - Binary operations
Variations to Consider
What if the linked list represented a number in base 3?
How would you handle negative numbers?
Can you solve it recursively?
Key Takeaways
Essential Concepts Mastered
✅ Linked List Traversal: Single-pass iteration technique ✅ Binary Number System: Understanding MSB-first representation ✅ Mathematical Optimization: Using shift-and-add strategy ✅ Space Efficiency: Achieving O(1) space complexity
Interview Tips
Start with examples: Always trace through the algorithm with sample input
Discuss trade-offs: Mention alternative approaches and their complexities
Handle edge cases: Consider empty lists, single nodes, all zeros
Clean code: Write readable, well-commented solutions
Common Mistakes to Avoid
Overthinking: Don't try to calculate powers of 2 manually
Extra space: Avoid storing the entire binary string
Off-by-one errors: Be careful with indexing and powers
Null pointer: Always check for nullptr before accessing nodes
Final Thoughts
LeetCode 1290 is more than just a coding problem—it's a gateway to understanding how mathematical insights can lead to elegant algorithmic solutions. The "shift and add" technique demonstrated here applies to many other problems involving number systems and bit manipulation.
Remember: The best solutions often come from stepping back and thinking about the problem from a mathematical perspective rather than just trying to implement the most obvious approach.
About the Author
This solution guide was crafted by experienced software engineers who have successfully interviewed at top tech companies. We specialize in breaking down complex algorithms into digestible, interview-ready explanations.
Tags: #LeetCode #CodingInterview #LinkedList #BinaryNumbers #Algorithms #DataStructures #TechInterview #Programming #CPlusPlus
Subscribe to my newsletter
Read articles from Code with Aarzoo directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
