Dvosmerni seznam
Podobna podatkovna struktura je tudi dvosmerni seznam. Pri tej podatkovni strukturi imamo v vozlišču dva kazalca (eden, ki kaže na predhodno vozlišče in eden, ki kaže na naslednje vozlišče). V podatkovni strukturi dvosmernega seznama pa imamo definirana tri kazalce (na prvo vozlišče, na trenutno vozlišče, na zadnje vozlišče). Prednost dvosmernega seznama pred enosmernim je možno premikanje v obe smeri, kar precej izboljša hitrost dostopa do vozlišč. Slabost pa so dvojne povezave s kazalci.
Slika 1: Dvosmerni seznam
struct vozlisce
{
int podatek;
vozlisce* k_naslednji;
vozlisce* k_prejsnji;
};
Primer:
vozlisce* zacetek, konec, novi, trenutni;
Predpostavimo, da je kazalec:
- zacetek - zacetek seznama;
- konec - konec seznama;
- trenutni - kazalec na element seznama, ki ga trenutno obdelujemo;
- novi - kazalec na novi element seznama.

Slika 2: Vloge kazalcev
Vstavljanje na začetek
novi->k_naslednji = zacetek;
novi->k_prejsni = NULL;
zacetek->k_prejsnji = novi;
zacetek = novi;
Vstavljanje na konec
novi->k_naslednji = NULL;
novi->k_prejsni = konec;
konec->k_naslednji = novi;
konec = novi;
Vstavljanje pred trenutni element
novi->k_naslednji = trenutni;
novi->k_prejsni = trenutni->k_prejsnji;
trenutni->k_prejsnji->k_naslednji = novi;
trenutni->k_prejsnji = novi;
Vstavljanje za trenutni element
novi->k_prejsnji = trenutni;
novi->k_naslednji = trenutni->k_naslednji;
trenutni->k_naslednji->k_prejsnji = novi;
trenutni->k_naslednji = novi;