Mark As Completed Discussion

Later on, when we remove nodes at the beginning or end, we'll need to account for the switch in this.head and this.tail.

Complexity for Final Solution

Since we have a reference to both head and tail nodes, the time complexities for both append and prepend are O(1) constant time complexity. Without a tail pointer, for append() we would have to iterate through the entire list in O(n) time where the list is length n. Each linked list node takes up a constant amount of space, for O(1) space complexity.