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 ]
-
Javascriptのバイナリツリー
バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。バイナリツリーには、検索が並べ替えられた配列と同じくらい高速であり、挿入または削除操作がリンクリストと同じくらい高速であるため、順序付き配列とリンクリストの両方の利点があります。 これは、以下で説明するいくつかの用語を含む二分木の図です- 重要な用語 以下は、ツリーに関する重要な用語です。 パス −パスとは、ツリーのエッジに沿ったノードのシーケンスを指します。 ルート −ツリーの最上部にあるノードはルートと呼ばれます。ツ
-
JavaScriptでオブジェクトごとに一意のIDを作成するにはどうすればよいですか?
以下は、オブジェクトごとに一意のIDを作成するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>