Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 각 노드에 대해 다음으로 큰 노드 찾기

<시간/>

문제

연결 리스트의 헤드를 첫 번째이자 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

이 연결 목록에는 숫자 데이터가 포함되어 있습니다. 목록의 각 노드는 다음으로 큰 값을 가질 수 있습니다. node_i의 경우 next_larger(node_i)는 j> i, node_j.val> node_i.val 및 j가 가능한 가장 작은 선택인 node_j.val입니다. 이러한 j가 존재하지 않는 경우 다음으로 큰 값은 0입니다.

우리 함수는 해당 요소가 목록의 요소에 대해 다음으로 큰 요소인 배열을 준비하고 반환해야 합니다.

예를 들어 목록이 -

인 경우

JavaScript에서 각 노드에 대해 다음으로 큰 노드 찾기

그러면 출력은 다음과 같아야 합니다. -

const output = [7, 0, 5, 5, 0];

출력 설명:

2의 다음으로 큰 요소는 7이기 때문에 7의 경우 더 큰 요소가 없는 식입니다.

예시

이에 대한 코드는 -

class Node{
   constructor(data){
      this.data = data;
      this.next = null;
   };
};
class LinkedList{
   constructor(){
      this.head = null;
      this.size = 0;
   };
};
LinkedList.prototype.add = function(data){
   const newNode = new Node(data);
   let curr
   if(this.head === null){
      this.head = newNode;
   }else{
      curr = this.head;
      while (curr.next) {
         curr = curr.next;
      }
      curr.next = newNode;
   };
   this.size++;
};
const list = new LinkedList();
list.add(2);
list.add(7);
list.add(4);
list.add(3);
list.add(5);
const nextGreater = (head) => {
   const arr = [];
   const res = [];
   let curr = head;
   let currentIndex = 0
   while(curr){
      while (arr.length > 0 && curr.data > arr[arr.length - 1][1]) {
         const [index] = arr.pop();
         res[index] = curr.data;
      };
      arr.push([currentIndex, curr.data]);
      currentIndex += 1;
      curr = curr.next;
   };
   for(let i = 0; i < currentIndex; i++){
      if(res[i] === undefined){
         res[i] = 0;
      };
   };
   return res;
};
console.log(nextGreater(list.head));

출력

콘솔의 출력은 -

[ 7, 0, 5, 5, 0 ]