Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ค้นหาโหนดที่ใหญ่กว่าถัดไปสำหรับแต่ละโหนดใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่นำหน้าของรายการที่เชื่อมโยงเป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว

ลิงค์ลิสต์นี้มีข้อมูลที่เป็นตัวเลข แต่ละโหนดในรายการอาจมีค่าที่มากกว่าถัดไป:สำหรับ node_i, next_larger(node_i) คือ node_j.val โดยที่ j> i, node_j.val> node_i.val และ j เป็นตัวเลือกที่เล็กที่สุด หากไม่มี 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 ]