public class LinkList<T> where T : IEquatable<T>
private LinkList<T> Next;
private LinkList<T> Head;
public void AddNode(T data)
LinkList<T> node = new LinkList<T>();
LinkList<T> tracker = this.Head;
while(tracker.Next != null)
public void RemoveNode(T data)
LinkList<T> tracker = this.Head;
LinkList<T> prevNode = null;
if(this.Head.Data.Equals(data))
while(tracker != null && !tracker.Data.Equals(data))
prevNode.Next = tracker.Next;
Console.WriteLine($"Node with data {data} not found..");
public void ReverseList()
LinkList<T> tracker = this.Head;
while(this.Head.Next != null)
this.Head = this.Head.Next;
Console.WriteLine("No items in the list.");
LinkList<T> tracker = this.Head;
Console.Write("List => ");
Console.Write(tracker.Data);
public static void Main()
LinkList<int> list = new LinkList<int>();
Console.WriteLine("1. Add node");
Console.WriteLine("2. Remove node");
Console.WriteLine("3. Print list");
Console.WriteLine("4. Reverse list");
Console.WriteLine("5. Exist");
Console.WriteLine("Enter your choice: ");
if(!Int32.TryParse(Console.ReadLine(), out choice))
Console.WriteLine("Invalid value, try again...");
Console.WriteLine("Enter value to add: ");
if(!Int32.TryParse(Console.ReadLine(), out input))
Console.WriteLine("Invalid value, try again...");
Console.WriteLine("Enter value to remove: ");
if(!Int32.TryParse(Console.ReadLine(), out input))
Console.WriteLine("Invalid value, try again...");
Console.WriteLine("Invalid value, try again...");
Console.WriteLine("Exited...");