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