blog

リンク・テーブルからノードを削除する3つの方法(JavaScript)

この方法のスケーラビリティは非常に優れています。例えば、先頭を返すには、まず先頭を保存し、最後に返すことができます。 このアプローチには問題があります。チェーンテーブルにノードが1つしかない場合、その...

Aug 23, 2020 · 1 min. read
シェア

リンクされたテーブルからノードを削除する3つの方法

1、シングルポインタを使用して削除

次のノードの値を、削除する現在のノードに割り当てます。

現在のノードは次の次のノードを指します。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 * this.val = val;
 * this.next = null;
 * }
 */
/**
 * @param {ListNode} node
 * @return {void} Do not return anything, modify node in-place instead.
 */
var deleteNode = function(node) {
 node.val = node.next.val 
 node.next = node.next.next
};

2.センチネルリンパ節削除の適用

例えば、HEADを返すには、まずHEADを保存し、最後にRETURNを返せばいいのです。

削除されたノードがヘッドノードかどうかを考慮する必要はありません。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 * this.val = val;
 * this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} data
 * @return {Boolean}
 */
LinkedList.prototype.remove = function(head,data){
 let pre = new Node(-1) // センチネルノード
 pre.next = head
 while(pre.next){
 if(pre.next.data===data){
 pre.next = pre.next.next
 break
 }
 pre = pre.next
 }
 return true
}

3、ダブルポインタで削除

この方法には問題があります。ノードが1つしかないチェーン・テーブルがある場合、そのノードを削除することはできません。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 * this.val = val;
 * this.next = null;
 * }
 */
/**
 * @param {ListNode} head 
 * @param {String/Number} data
 * @return {Boolean} 
 */
LinkedList.prototype.remove = function(head,data){
 let current = head
 let previous = null
 while (current) {
 if(current.data === data){
 previous.next = current.next
 break
 }
 previous = current
 current = current.next
 }
 return true
}
Read next

diffアルゴリズム

1. データが変更されたとき、reactやVueはどのようにViewを更新するのですか? 実際のDOMノードをレンダリングするオーバーヘッドは非常に大きく、例えば、あるデータが変更され、それを実際のDOMツリーにレンダリングすると、DOMツリー全体が再描画され、再配置されます。 diff アルゴリズムはこれを実現できます。...

Aug 23, 2020 · 6 min read