在 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 ]
广告