I would liked to have a class template with a single type parameter, and inside the class hold a pointer to the next class in the linked-list, but allow that class to potentially be of a different type (in this example the different type is a specialization.)
I tried this code:
template<typename T, typename U>
class Banana
{
public:
void function(T parameter); // illustrates class methods/members only concerned with single type T
Banana<U>* next;
}
The compiler gives error:
'Banana':too few template arguments.

I gather you want to do this statically. One way to do this is to specify a succession order. In the example below I have composed the type, but this will obviously not work if you have loops in your succession order. In that case, use a
std::unique_ptrinstead.(demo)
You can of course also do this with polymorphism by having a common base class. This would be just a regular list.
Edit: Here's a way to do it dynamically at runtime. It is a bit more cumbersome to instantiate but it allows you the flexibility to have arbitrary lists. See the updated link to the demo above.