I think the implementation of linked lists can be improved by…
- adding the length property,
- adding the previous property, which points at previous node, and
- replacing insertAfter and removeAfter methods with insertAt and removeAt methods respectively, which use the index parameter.
Those are some good ideas. Here are a few additional comments to take into consideration:
length property would have O(n) time complexity since you would need to start at
head and count the nodes until you got to
tail. You could improve this to O(1) if you added some additional logic to cache the length and update the value every time you added or removed a node.
previous: Adding a
previous property would make this a doubly linked list, which is a slightly different data structure than the singly linked list described in the Linked Lists chapter. The advantage of having
previous is that it would be O(1) to get the previous node. The disadvantage is that the logic is a bit more complex and the memory overhead a little higher since you are pointing to an extra node. Everything is a tradeoff, so you need to make the decision based on the requirements of your application.
insert: I completely agree that
removeAt with an index are much better from the UX perspective than
removeAfter. The difference is that
removeAt are slower O(i) operations (where
i is the index), whereas
removeAfter are fast O(1) operations.