How it works
Remove the first node matching a value by splicing its neighbours together through prev and next pointers.
Implementation
function dllDeleteOp(state, target) { const valueArr = state.value; const next = state.next; const prev = state.prev; let current = state.head; while (current !== -1) { visitNode(current); compareKeys(current, target); if (valueArr[current] === target) { const p = prev[current]; const n = next[current]; if (p !== -1) { next[p] = n; } else { state.head = n; } if (n !== -1) { prev[n] = p; } removeNode(current); finish(current); return; } current = next[current]; } reportNotFound(); }
def dllDeleteOp(state, target): valueArr = state.value next = state.next prev = state.prev current = state.head while (current != -1): visitNode(current) compareKeys(current, target) if (valueArr[current] == target): p = prev[current] n = next[current] if (p != -1): next[p] = n else: state.head = n if (n != -1): prev[n] = p removeNode(current) finish(current) return current = next[current] reportNotFound()
#include <vector> #include <algorithm> void dllDeleteOp(int state, int target) { auto valueArr = state.value; auto next = state.next; auto prev = state.prev; auto current = state.head; while((current != -1)) { visitNode(current); compareKeys(current, target); if((valueArr[current] == target)) { auto p = prev[current]; auto n = next[current]; if((p != -1)) { next[p] = n; } else { state.head = n; } if((n != -1)) { prev[n] = p; } removeNode(current); finish(current); return; } current = next[current]; } reportNotFound(); }
public void dllDeleteOp(int state, int target) { var valueArr = state.value; var next = state.next; var prev = state.prev; var current = state.head; while((current != -1)) { visitNode(current); compareKeys(current, target); if((valueArr[current] == target)) { var p = prev[current]; var n = next[current]; if((p != -1)) { next[p] = n; } else { state.head = n; } if((n != -1)) { prev[n] = p; } removeNode(current); finish(current); return; } current = next[current]; } reportNotFound(); }
#include <stdio.h> void dllDeleteOp(int state, int target) { var valueArr = state.value; var next = state.next; var prev = state.prev; var current = state.head; while((current != -1)) { visitNode(current); compareKeys(current, target); if((valueArr[current] == target)) { var p = prev[current]; var n = next[current]; if((p != -1)) { next[p] = n; } else { state.head = n; } if((n != -1)) { prev[n] = p; } removeNode(current); finish(current); return; } current = next[current]; } reportNotFound(); }