così?

codice:
#include <iostream.h>

template <typename Tipo>
struct nodo {
	Tipo val;
	struct nodo <Tipo> *next;
};

template <typename Tip>
class Lista
{
	struct nodo <Tip> *l;
	int lunghezza;
	
	public:
		Lista()
		{
			l = NULL;
			lunghezza = 0;
		}
		
		void push(Tip el)
		{
			struct nodo <Tip> *z = new(struct nodo <Tip>);
			z->val = el;
			z->next = l;
			l = z;
			lunghezza++;
		}

		void visualizza(void)
		{
			struct nodo <Tip> *z = l;
			while (z != NULL)
			{
				cout << z->val << " ---> ";
				z = z->next;
			}
			cout << "NULL\n\n";
		}
		
		int lung(void)
		{
			return lunghezza;
		}
};

template<>
class Lista<char *>{
	struct nodo <char *> *l;
	int lunghezza;
	
	public:
		void push(char *s){ 
			for (int i = 0; (l->val[i] = s[i]) != '\0'; i++)
				;
			lunghezza++;
		}
};


int main()
{
	Lista <char [20]> lis;
	lis.push("cioa");
	lis.push("come");
	lis.visualizza();
	cout << lis.lung();
}
nemmeno mi va...