[Easy] 1290. Convert Binary Number in a Linked List to Integer

문제

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.

단일 head연결 목록에 대한 참조 노드가 지정됩니다. 연결 목록의 각 노드 값은 0또는 1입니다. 연결 목록은 숫자의 이진 표현을 보유합니다.

연결 목록에 있는 숫자 의 10진수 값 을 반환합니다 .

 

예시

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

 

제약 조건

Constraints:

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

 

해결 과정

linked list를 탐색하며 val 값을 binary 배열에 저장하고 join을 통해 10진수로 바꾸어보았다.

이번 문제는 첫 시도에 해결할 수 있었다.

  • linked list에 있는 val 값을 저장할 binary 배열을 선언한다.
  • while문에서 탐색할 때 사용할 curr 변수와 prev 변수를 초기화한다. 이때 초기값은 head와 null로 설정한다.
  • curr 값이 null이 될 때까지 while문을 반복한다.
    • curr의 val값을 binary 배열에 저장한다.
    • curr은 curr.next로, prev는 curr로 옮기며 탐색을 한다.
  • while문을 빠져나온 후, binary값을 join을 통해 병합한 후 10진수로 변환하여 반환한다.

 

해결 코드

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {number}
 */
var getDecimalValue = function(head) {
    let binary = [];
    
    let curr = head;
    let prev = null;
    
    while(curr){
        binary.push(curr.val);
        let temp = curr;
        curr = curr.next;
        prev = temp;
    }

    return parseInt(binary.join(""), 2);
};