using C_.Datastructures.Nodes; namespace C_.Datastructures { internal class Stack { internal StackNode? Head { get; set; } private int Count { get; set; } = 0; public Stack Create(){ //Create a new stack without a head return new Stack(); } public Stack Create(T value){ //Create a new Stack with a head return new Stack{ Head = StackNode.Create(value, default), Count = 1 }; } public void Push(T value){ //Add an Item to the end of the list if (Count > 0) { Count++; Head = StackNode.Create(value, Head); return; } } public T? Pop(){ T? value = default; if (Count > 0) {//Assign the default value if there are any items left in the stack Count--; value = Head!.Value; Head = Head.Next; } return value; } public T? Peek(){ if (Count > 0) { return Head!.Value; } return default; } } }