08: More Lists

Submit this homework using Gradescope. You can type up your answers, or write legibly and scan them. Do not attempt to submit a paper copy in class, as it will not be accepted.


A. (3 points) Consider the methods get(index), add(element), and remove(index) from the java.util.List API. For each of these methods, is there ever a situation where the method will run faster for an ArrayList than for a LinkedList? Briefly explain.

Assume the LinkedList is implemented a head pointer and no other instance variables (no size!); that is, it is a singly linked list, and that the ArrayList‘s backing array is large enough to hold the new element (no enlarge() needed). Also assume each of the following operations takes the same amount of time: array lookups, setting elements of arrays, creating new nodes, traversing a single link in a linked list, and assigning a reference (ex, calling setNext on a node).

B. (2 points) Write a public List<String> mergeLists(List<String> s1, List<String> s2) method that correctly merges two List<String> lists s1 and s2 together. To correctly merge two lists, the method must make a third list that alternates the values from s1 and s2. The lists might not be the same length, so you must check to see all values are included from the longer list. Assume both lists are non-null, though one or both may be empty.

Example 1:

Inputs:
     s1: {"a","c","e","g","i"}
     s2: {"b","d","f","h","j"}

Returns: {"a","b","c","d","e","f","g","h","i","j"}

Example 2:

Inputs:
     s1: {"p","o"}
     s2: {"r","d","a","w","j"}

Returns: {"p","r","o","d","a","w","j"}