CSE205 Assignment #10 Solution

You are required, but not limited, to turn in the following source files:

Assignment10.java (This file does not need to be modified) 
LinkedList.java (It needs to be modified) 
ListIterator.java (This file does not need to be modified)

Requirements to get full credits in Documentation
The assignment number, your name, StudentID, Lecture number, and a class description need to be included at the top of each file/class.
A description of each method is also needed.
Some additional comments inside of long methods (such as a "main" method) to explain codes that are hard to follow should be written.
You can look at the Java programs in the text book to see how comments are added to programs.

New Skills to be Applied
In addition to what has been covered in previous assignments, the use of the following items, discussed in class, will probably be needed:

Linked Lists

Program Description
Class Diagram:



In the Assignment #10, you are given three files Assignment10.java, LinkedList.java, and ListIterator.java. You will need to add additional methods in the LinkedList class in the LinkedList.java file. The LinkedList will be tested using strings only.

Specifically, the following methods must be implemented in the LinkedList class:
(You should utilize listIterator() method already defined in the LinkedList class to obtain its LinkedListIterator object, and use the methods in the LinkedListIterator class to traverse from the first element to the last element of the linked list to define the following methods.) 
 


public String toString()
The toString method should concatenate strings in the linked list, and return a string of the following format:

{ Apple Banana Melon Orange }

Thus it starts with "{" and ends with "}", and there is a space between strings and "{" or "}". If the list is empty, it returns "{ }" with a space in between. Note that all elements in the linked list will be added in alphabetical order.
 


public int size()
The size method returns the number of strings that the linked list contains at the time when this method is called.


public void addElement(Object element)
The addElement adds the parameter element into the linked list. The linked list should contain all elements (strings) in alphabetical order. Therefore, in this addElement method, a correct location to insert the parameter element needs to be searched and the element needs to be inserted in that location.


public void removeElementsAtOddIndices( )
The removeElementsAtOddIndices should remove objects at odd indices within the linked list. For instance, if the linked list contains { Apple Banana Melon Orange }, then after calling this method, the linked list will contains { Apple Melon } since Banana at the index 1 and Orange at the index 3 need to be removed. Each element within the linked list will can be labeled starting the index 0, and based on this assumption, elements should be removed. If the linked list does not contain any element, or contains only one element, then the method should not change its content.


public void removeAdditionalOccurrences(Object element)
The removeAdditionalOccurrences method should search the parameter object (a string in this case) in the linked list, then it should keep the first occurrence of the element, but it should remove any other elements that is same as the parameter object within the linked list if any. For instance, if the linked list contains { Apple Banana Banana Banana Melon Melon Orange }, then after calling removeAdditionalOccurrences(Banana), the linked list will become { Apple Banana Melon Melon Orange }.


public Object searchByIndex(int index)
The searchByIndex method should look for an object of the given parameter index and return it. If the parameter index is larger or smaller than the existing indices, it should throw an object of the IndexOutOfBoundsException class.


public void searchAndIncrease(Object element, int howMany)
The searchAndIncrease method should search the parameter object (a string), and if it is found, add the same object (a string) as many as the integer specified by the parameter howMany. For instance, if the linked list contains { Apple Banana Melon Orange }, and searchAndIncrease(Melon, 3) is called, then the linked list will contain { Apple Banana Melon Melon Melon Melon Orange } by adding Melon three times right after the found Melon. If the parameter element is not found in the linked list, or the value of howMany is 0 or less, then it should not change the content of the linked list.

 

Test your LinkedList class with the given Assignment10.java file.
It is recommended to test boundary cases such as the cases when the linked list is empty, when it contains only one element, when adding/removing at the beginning or at the end of the linked list.

Input
The following files are the test cases that will be used as input for your program (Right-click and use "Save As"):

Test Case #1
Test Case #2
Test Case #3
Test Case #4

Output
The following files are the expected outputs of the corresponding input files from the previous section (Right-click and use "Save As"):

Test Case #1
Test Case #2
Test Case #3
Test Case #4

Error Handling
Your program is expected to be robust enough to pass all test cases.
Powered by