在 JavaScript 中,為連結串列中的每個節點查詢下一個更大的節點
問題
我們要求編寫一個 JavaScript 函式,它將連結串列的頭作為第一個也是唯一引數。
此連結串列包含數字資料。連結串列中的每個節點可能都有一個下一個較大的值:對於 node_i,next_larger(node_i) 是 node_j.val,其中 j> i、node_j.val> node_i.val,且 j 是最小的可能選擇。如果不存在這樣的 j,則下一個較大的值為 0。
我們的函式應準備並返回一個數組,其中相應元素是連結串列中元素的下一個較大元素。
例如,如果連結串列為 -

則輸出應為 -
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 ]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP