Exposing Node?
Consider the following operation which we have explored earlier:
public void delete(Node<T> target) { }
public void insertAfter(Node<T> target, T data) { }
public void insertBefore(Node<T> target, T data) { }
Exercise How does one get a reference to a node in an arbitrarily position among the nodes in a DLL?
Solution
We can update the get method to return a reference to a node at the target position.
- public T get(int index) { }
+ public Node<T> get(int index) { }
We can also update the following methods to return a reference to a newly inserted node.
- public void addFirst (T data) { }
+ public Node<T> addFirst (T data) { }
- public void addLast(T data) { }
+ public Node<T> addLast(T data) { }
When we use Node as a type in the signature of any public operations (such as delete), we must also make Node available (change it from private to a public static nested class).
Exercise What are the potential risks of exposing Node to clients of DLL?
Solution
A deviant client can change the value stored at a node and change the next/prev pointers. The latter will corrupt the data structure.