まず、ノード削除の基本的な方法を見てみましょう。以下のコード例では、単方向連結リストのノードを削除する方法を示します。
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
deleteNode(key) {
let currentNode = this.head;
let prevNode = null;
// ヘッドノードが削除対象の場合
if (currentNode !== null && currentNode.data === key) {
this.head = currentNode.next;
return;
}
// リストを探索して削除対象のノードを見つける
while (currentNode !== null && currentNode.data !== key) {
prevNode = currentNode;
currentNode = currentNode.next;
}
// ノードを見つけた場合、削除する
if (currentNode !== null) {
prevNode.next = currentNode.next;
}
}
}
// 使用例
const linkedList = new LinkedList();
linkedList.head = new Node(1);
linkedList.head.next = new Node(2);
linkedList.head.next.next = new Node(3);
linkedList.head.next.next.next = new Node(4);
console.log("削除前:");
console.log(linkedList);
linkedList.deleteNode(3);
console.log("削除後:");
console.log(linkedList);
上記のコードでは、LinkedList
と Node
のクラスを定義し、deleteNode
関数で指定されたキーに対応するノードを削除します。ノードが見つかった場合は、その前後のノードを適切につなぎ替えることでノードを削除します。
このコード例は単方向連結リストに対するノード削除の方法ですが、他のデータ構造に対しても同様のロジックが適用できます。例えば、二重連結リストや二分木などでも利用することができます。
以上がJavaScriptでHackerrankのノード削除を行う方法とそのコード例です。この方法を応用して、他の問題にも活用してみてください。