リンクされたテーブルからノードを削除する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
}





