public class PolygonList
{
public VertexStack head;
public VertexStack curr;
public VertexStack prev;
public int count;
public int width;
public int height;
    
public PolygonList(int width_, int height_)
    {
	head = null;
	curr = null;
	prev = null;
	width = width_;
	height = height_;
	count = 0;
    }

public VertexStack insert()
    {
	if(head == null)
	    {
		head = new VertexStack(width, height);
		curr = head;
		prev = null;
	    }
	else if(curr == head && prev == null)
	    {
		curr = new VertexStack(width, height);
		curr.next = head;
		head.prev = curr;
		head = curr;
	    }
	else if(prev != null && curr == null)
	    {
		curr = new VertexStack(width, height);
		curr.prev = prev;
		prev.next = curr;
	    }
	else if(prev != null && curr != null)
	    {
		VertexStack temp = new VertexStack(width, height);
		temp.prev = prev;
		prev.next = temp;
		temp.next = curr;
		curr.prev = temp;
		curr = temp;
	    }
	count++;
	return curr;
    }

public boolean remove()
    {
	if(curr == null)
	    return false;
	if(curr == head)
	    head = curr.next;
	curr = curr.next;
	if(curr != null)
	    curr.prev = prev;
	if(prev != null)
	    prev.next = curr;
	count--;
	return true;
    }
    
public VertexStack prev()
    {
	if(prev!=null)
	    {
		curr = prev;
		prev = prev.prev;
	    }
	return curr;
    }

public VertexStack next()
    {
	if(curr!=null)
	    {
		prev = curr;
		curr = curr.next;
	    }
	return curr;
    }

public boolean forward()
    {
	if(prev==null)
	    return false;
	
	VertexStack preprev = prev.prev;
	VertexStack postcur = curr.next;
	
	prev.next = curr.next;
	curr.next = prev;
	curr.prev = prev.prev;
	prev.prev = curr;
	if(preprev != null)
	    preprev.next = curr;
	else
	    head = curr;
	if(postcur != null)
	    postcur.prev = prev;
	prev = curr.prev;
	return true;
    }
}

