The advantage of an empty node is that it's easier to represent an empty list that still otherwise exists.
While you can sometimes represent an empty list as simply null, the disadvantage is that it assumes that lists are always represented as pointers. Another disadvantage is that you can't call any functions on null/ you make the interface awkward.
Imagine:
RootNodedListNode<char> list; // start empty
list.add('a');
list.add('b');
RootlessListNode<char> * list = null; // start empty
//list->add('a');
list = new RootlessListNode<char>('a');
list->add('b');