Skip to content

Instantly share code, notes, and snippets.

@omalinov
Created May 4, 2022 15:44
Show Gist options
  • Save omalinov/66d7b16887df31a46640f6e2e4cc3d20 to your computer and use it in GitHub Desktop.
Save omalinov/66d7b16887df31a46640f6e2e4cc3d20 to your computer and use it in GitHub Desktop.
Procedural doubly list
struct List
{
struct Node
{
Node* Next = nullptr;
Node* Prev = nullptr;
int Data;
};
Node* First = nullptr;
Node* Last = nullptr;
};
void InitList(List& list, int data)
{
list.First = new List::Node();
list.First->Data = data;
list.First->Next = list.First;
list.First->Prev = list.First;
list.Last = list.First;
}
void PushFront(List& list, int data)
{
if (!list.First)
{
InitList(list, data);
return;
}
List::Node* node = new List::Node();
node->Data = data;
node->Next = list.First;
node->Prev = list.Last;
list.First->Prev = node;
list.Last->Next = node;
list.First = node;
}
void PushBack(List& list, int data)
{
if (!list.First)
{
InitList(list, data);
return;
}
List::Node* node = new List::Node();
node->Data = data;
node->Next = list.First;
node->Prev = list.Last;
list.First->Prev = node;
list.Last->Next = node;
list.Last = node;
}
void Destroy(List& list)
{
while (list.First && list.First != list.Last)
{
List::Node* pin = list.First;
list.First = list.First->Next;
delete pin;
}
if (list.First)
{
delete list.First;
}
list.First = nullptr;
list.Last = nullptr;
}
int main()
{
List list;
PushFront(list, 1);
PushFront(list, 2);
PushFront(list, 3);
Destroy(list);
Destroy(list);
PushFront(list, 1);
Destroy(list);
PushBack(list, 1);
PushBack(list, 2);
PushBack(list, 3);
Destroy(list);
Destroy(list);
PushBack(list, 1);
Destroy(list);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment