Doppelt verkettete Listen

Bei doppelt verketteten Listen, gibt es die beiden Zeiger *next und *previous, welche auf das vorige bzw. nächste Element der Liste verweisen. Der Zeiger *last ermöglicht es, anders als bei einfach verketteten Listen, auch am Ende des „Zuges“ einzusteigen.

struct CWaggon
{AnsiString data;
 CWaggon *next;
 CWaggon *previous;
};
 
CWaggon *first=0,*last=0;

Einhängen eines Waggons von vorne

void __fastcall TForm1::Button1Click(TObject *Sender)
{CWaggon *tmp = new CWaggon;
 tmp->data=Edit1->Text;
 tmp->next=first;
 tmp->previous = 0;
 if (tmp->next!=0)tmp->next->previous=tmp;
 else last=tmp;
 first=tmp;
 Edit1->Text  = "";
}

Einhängen eines Waggons von hinten

void __fastcall TForm1::Button2Click(TObject *Sender)
{ CWaggon *tmp = new CWaggon;
 tmp->data=Edit2->Text;
 tmp->previous=last;
 tmp->next =0;
 if (tmp->previous!=0)tmp->previous->next=tmp;
 else first=tmp;
 last=tmp;
 Edit2->Text="";
}