public T Peek() { if (Head == null) { throw new NullReferenceException("Empty Queue"); } else { return(Head.Clone().Value); } }
public T Dequeue() { if (Head == null) { throw new NullReferenceException("Empty Queue"); } else if (Head == Tail) { var tmp = Head.Value; Head = null; Tail = null; Current = null; return(tmp); } else if (Tail.Next == Head) { var tmp = Head.Value; Head = Tail; Head.Next = null; return(tmp); } else { var tmp = Head.Value; Head = Tail.Clone(); while (Head.Next.Next != null) { Head = Head.Next; } Head.Next = null; return(tmp); } }