N

(Leet Code JS)Merge Nodes In Between Zeros 본문

Leet Code 알고리즘

(Leet Code JS)Merge Nodes In Between Zeros

naeunchan 2022. 4. 11. 16:47
728x90
반응형

https://leetcode.com/problems/merge-nodes-in-between-zeros/

 

주어진 연결 리스트에서 0으로 된 노드 사이의 값을 더하여 새로운 연결 리스트로 반환하면 된다.

 

우선 answer를 new ListNode()로 선언한다.

그리고 head 내부에 있는 값을 배열에 저장하기 위해 arr 배열을 선언.

0 노드 사이의 값을 더하기 위한 sum과 포인터인 current를 선언한다.

current는 head를 가리켜 arr에 값을 저장하도록 한다.

 

while문으로 head를 한 번 순회한다.

current !== null 때 까지 반복.

순회를 할 때에는 노드의 값을 더하여 arr에 저장한다.

0이 아닌 수는 sum에 더하고, 만약 노드에서 0을 만나게 되고 sum이 0이 아니라면 arr에 넣어준다.

또한, sum = 0으로 초기화.

current는 계속 다음 노드를 가리키도록 한다.

 

순회가 끝나면 current = answer로 하여 이제 정답을 맞춰나가도록 한다.

arr 배열을 순회.

current.val = arr[i]로 하여 answer.val = 0 노드 사이의 합을 저장하도록 한다.

또한, arr의 마지막에는 null을 가리켜야 하기 때문에,

i < arr.length - 1 인 경우에만

current가 다음 노드를 생성하도록 한다.

var mergeNodes = function(head) {
    const answer = new ListNode();
    const arr =[];
    let current = head;
    let sum = 0;
    
    while(current !== null){
        if(current.val !== 0){
            sum += current.val;
        } else{
            if(sum !== 0){
                arr.push(sum);
                sum = 0;
            }
        }
        current = current.next;
    }
    
    current = answer;
    
    for(let i = 0; i < arr.length; i++){
        current.val = arr[i];
        
        if(i < arr.length - 1){
            current.next = new ListNode();
            current = current.next;
        }
    }
    
    return answer;
};
728x90
반응형