We want to *efficiently* implement the OrderedSet ADT with an underlying linked list.

Exercise Complete the following table.

Operation | How? | Runtime |
---|---|---|

`has` | ||

`insert` | ||

`remove` | ||

`size` |

## Solution

All operations, except for `size`

, require a helper `find`

method to check if an element exists. We cannot do better than Linear Search for `find`

. (Performing Binary Search on a linked list is futile as its cost is $O(n)$ while its implementation is more complex than Linear Search.)

Operation | How? | Runtime |
---|---|---|

`has` | `return find(t) != null;` | $O(n)$ |

`insert` | Find where to insert, then insert! | $O(n)$ |

`remove` | `remove(find(t));` | $O(n)$ |

`size` | `return numElements;` | $O(1)$ |

`find` | Linear search | $O(n)$ |

We can come up with clever implementation so the `find`

method would return the previous node of the target (instead of the target node itself). This will make it easier for the `insert`

method to use the same `find`

operation as the one used by other operations. We leave this as an (unsolved) exercise to you, to implement the operations of OrderedSet using a linked list.