public void delete(Integer searchKey)
	{
		int i;
		ArrayList<SkipListsNode> update = new ArrayList<SkipListsNode>();
		SkipListsNode x = header;
		
		for(i=topLevel; i>-1; i--)
		{
			while(x.forwards.get(i).key.compareTo(searchKey) < 0)
				x = x.forwards.get(i);
			
			update.add(0, x);
		}
		
		x = x.forwards.get(0);
		if(x.key.intValue() == searchKey.intValue())
		{
			// Delete x by amending the pointers, x is not to be free as it will be destroyed by java's garbage collection
			for(i=0; i<=topLevel; i++)
			{
				if(update.get(i).forwards.get(i) != x)
					break;
				else
					update.get(i).forwards.set(i, x.forwards.get(i));
			}
			
			// Remove level with no nodes
			while(topLevel>0 && header.forwards.get(topLevel) == nil)
				topLevel--;
		}		
	}