public void insert(SkipListsNode searchKey) 
	{
		int i, lvl=0;
		ArrayList<SkipListsNode> update = new ArrayList<SkipListsNode>();
		SkipListsNode x = header;
		
		for(i=topLevel; i>-1; i--)
		{
			while(x.forwards.get(i).key.compareTo(searchKey.key) < 0)
				x = x.forwards.get(i);
			
			update.add(0, x);
		}
		
		x = x.forwards.get(0);
		if(x.key.intValue() == searchKey.key.intValue())
			return;
		else
		{
			// Add new levels
			lvl = randomLevel();
			if(lvl > topLevel)
			{
				for(i=topLevel+1; i<=lvl; i++)
				{
					update.add(header);
					header.forwards.add(nil);
				}

				topLevel = lvl;
			}
			
			// Add the new node and amend appropriate pointers
			for(i=0; i<=topLevel; i++)
			{
				searchKey.forwards.add(i, update.get(i).forwards.get(i));
				update.get(i).forwards.set(i, searchKey);
			}
		}
	}