How it works
Insert a new node at the head of a doubly linked list, wiring both next and prev pointers.
Implementation
function dllInsertHeadOp(state, value) { const valueArr = state.value; const next = state.next; const prev = state.prev; const id = valueArr.length; valueArr[id] = value; next[id] = state.head; prev[id] = -1; insertNode(id, value); if (state.head !== -1) { prev[state.head] = id; linkNodes(id, state.head); } state.head = id; finish(id); }
def dllInsertHeadOp(state, value): valueArr = state.value next = state.next prev = state.prev id = valueArr.length valueArr[id] = value next[id] = state.head prev[id] = -1 insertNode(id, value) if (state.head != -1): prev[state.head] = id linkNodes(id, state.head) state.head = id finish(id)
#include <vector> #include <algorithm> void dllInsertHeadOp(int state, int value) { auto valueArr = state.value; auto next = state.next; auto prev = state.prev; auto id = valueArr.length; valueArr[id] = value; next[id] = state.head; prev[id] = -1; insertNode(id, value); if((state.head != -1)) { prev[state.head] = id; linkNodes(id, state.head); } state.head = id; finish(id); }
public void dllInsertHeadOp(int state, int value) { var valueArr = state.value; var next = state.next; var prev = state.prev; var id = valueArr.length; valueArr[id] = value; next[id] = state.head; prev[id] = -1; insertNode(id, value); if((state.head != -1)) { prev[state.head] = id; linkNodes(id, state.head); } state.head = id; finish(id); }
#include <stdio.h> void dllInsertHeadOp(int state, int value) { var valueArr = state.value; var next = state.next; var prev = state.prev; var id = valueArr.length; valueArr[id] = value; next[id] = state.head; prev[id] = -1; insertNode(id, value); if((state.head != -1)) { prev[state.head] = id; linkNodes(id, state.head); } state.head = id; finish(id); }