My core input methods like "addLast", "addFirst", receive a "data" object parameter. For example if my elements are City objects, then I would be sent a message with this sort of pattern -- "addLast(aCity)".
I privately use "nodes" to hold data. I couldn't do it without nodes. If I have 1,000 elements that means I have 1,000 nodes (each node holds one element). I say "privately" because I will not return nodes to public messages I receive -- however, I will return data.