using System;
class Node {
internal Object data;
internal Node next;
public Node(Object o, Node n){
data = o;
next = n;
}
}
public class LinkedList {
private Node head;
private Node previous;
private Node current;
public LinkedList() {
head = null;
previous = null;
current = null;
}
public bool IsEmpty() {
return head == null;
}
public void Insert(Object o) {
Node n = new Node(o,current);
if (previous == null)
head = n;
else
previous.next = n;
current = n;
}
public void Remove() {
if (head != null){
if (previous == null)
head = head.next;
else
previous.next = current.next;
current = current.next;
}
}
public Object GetData(){
if (current != null)
return current.data;
return null;
}
public bool AtEnd() {
return current == null;
}
public void Advance(){
if (!AtEnd()){
previous = current;
current = current .next;
}
}
public void Reset() {
previous = null;
current = head;
}
public void Display() {
Reset();
if (head != null)
do {
Console.WriteLine(" {0}", GetData());
Advance();
}while (!AtEnd());
}
public static void Main() {
LinkedList list = new LinkedList();
Console.WriteLine("Is Empty {0}",list.IsEmpty());
list.Insert("A");
list.Insert("B");
list.Insert("C");
Console.WriteLine("The original list is:");
list.Display();
list.Reset();
list.Advance();
Console.WriteLine("The current element is {0}",list.GetData());
list.Remove();
list.Display();
}
}