Question
Modify the List class of Figure 21.3 in the textbook to include a method that recursively searches a linked-list for a specified value. Ensure that
Modify the List class of Figure 21.3 in the textbook to include a method that recursively searches a linked-list for a specified value. Ensure that the name of your method includes your last name. The method must return a reference to the value if it is found; otherwise, it must return null. Use your method in a test program that creates a list of integers. The program must prompt the user for a value to locate in the list.
// Fig. 21.3: List.java // ListNode and List class declarations. package com.deitel.datastructures; import java.util.NoSuchElementException; // class to represent one node in a list class ListNode { // package access members; List can access these directly E data; // data for this node ListNode nextNode; // reference to the next node in the list // constructor creates a ListNode that refers to object ListNode(E object) {this(object, null);} // constructor creates ListNode that refers to the specified // object and to the next ListNode ListNode(E object, ListNode node) { data = object; nextNode = node; } // return reference to data in node E getData() {return data;} // return reference to next node in list ListNode getNext() {return nextNode;} } // class List definition public class List { private ListNode firstNode; private ListNode lastNode; private String name; // string like "list" used in printing // constructor creates empty List with "list" as the name public List() {this("list");} // constructor creates an empty List with a name public List(String listName) { name = listName; firstNode = lastNode = null; } // insert item at front of List public void insertAtFront(E insertItem) { if (isEmpty()) { // firstNode and lastNode refer to same object firstNode = lastNode = new ListNode(insertItem); } else { // firstNode refers to new node firstNode = new ListNode(insertItem, firstNode); } } // insert item at end of List public void insertAtBack(E insertItem) { if (isEmpty()) { // firstNode and lastNode refer to same object firstNode = lastNode = new ListNode(insertItem); } else { // lastNode's nextNode refers to new node lastNode = lastNode.nextNode = new ListNode(insertItem); } } // remove first node from List public E removeFromFront() throws NoSuchElementException { if (isEmpty()) { // throw exception if List is empty throw new NoSuchElementException(name + " is empty"); } E removedItem = firstNode.data; // retrieve data being removed // update references firstNode and lastNode if (firstNode == lastNode) { firstNode = lastNode = null; } else { firstNode = firstNode.nextNode; } return removedItem; // return removed node data } // remove last node from List public E removeFromBack() throws NoSuchElementException { if (isEmpty()) { // throw exception if List is empty throw new NoSuchElementException(name + " is empty"); } E removedItem = lastNode.data; // retrieve data being removed // update references firstNode and lastNode if (firstNode == lastNode) { firstNode = lastNode = null; } else { // locate new last node ListNode current = firstNode; // loop while current node does not refer to lastNode while (current.nextNode != lastNode) { current = current.nextNode; } lastNode = current; // current is new lastNode current.nextNode = null; } return removedItem; // return removed node data } // determine whether list is empty; returns true if so public boolean isEmpty() {return firstNode == null;} // output list contents public void print() { if (isEmpty()) { System.out.printf("Empty %s%n", name); return; } System.out.printf("The %s is: ", name); ListNode current = firstNode; // while not at end of list, output current node's data while (current != null) { System.out.printf("%s ", current.data); current = current.nextNode; } System.out.println(); } } ****************** and the test file // Fig. 21.4: ListTest.java // ListTest class to demonstrate List capabilities. import com.deitel.datastructures.List; import java.util.NoSuchElementException; public class ListTest { public static void main(String[] args) { List list = new List<>(); // insert integers in list list.insertAtFront(-1); list.print(); list.insertAtFront(0); list.print(); list.insertAtBack(1); list.print(); list.insertAtBack(5); list.print(); // remove objects from list; print after each removal try { int removedItem = list.removeFromFront(); System.out.printf("%n%d removed%n", removedItem); list.print(); removedItem = list.removeFromFront(); System.out.printf("%n%d removed%n", removedItem); list.print(); removedItem = list.removeFromBack(); System.out.printf("%n%d removed%n", removedItem); list.print(); removedItem = list.removeFromBack(); System.out.printf("%n%d removed%n", removedItem); list.print(); } catch (NoSuchElementException noSuchElementException) { noSuchElementException.printStackTrace(); } } } Please also provide the change to the code that will allow for the program to prompt the user for a value to locate in the list.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started