It occurred to me, after writing about linked lists yesterday, that you might want to do this:
var myList = new LinkedList.Circular();
myList.append(foo);
myList.append(bar);
myList.first = baz;
Doing that would break the list: baz
does not (we assume) have correct prev
and next
pointers set. And so we have another use for the LinkedList.Node
:
you can change its data
property and leave its pointers intact:
var myList = new LinkedList.Circular();
myList.append(new LinkedList.Node(foo));
myList.append(new LinkedList.Node(bar));
myList.first.data = baz;
You’ve just changed the first item in the list, but its placeholder in the list remains unchanged.
I also mentioned that you might want to use nodes if you need to include items
in multiple lists: several nodes can have their data
property point to the
same object. But, you can also, should you wish, include the same item multiple
times in the same list:
var myList = new LinkedList.Circular();
myList.append(new LinkedList.Node(foo));
myList.append(new LinkedList.Node(bar));
myList.append(new LinkedList.Node(foo));
That list has three distinct nodes, but the first and last nodes both point to
foo
. So you could use this, for example, to make a queue of operations where
some actions need to be repeated at different points in the sequence.