The LinkedList1 class implements a Linked list class Linke

/**
   The LinkedList1 class implements a Linked list.
*/

class LinkedList1
{
    /**
       The Node class stores a list element
       and a reference to the next node.
    */
  
    private class Node
    {
        String value;
        Node next;    
      
        /**
           Constructor.          
           @param val The element to store in the node.
           @param n The reference to the successor node.
        */
      
        Node(String val, Node n)
        {
            value = val;
            next = n;
        }
      
        /**
           Constructor.
           @param val The element to store in the node.
        */
      
        Node(String val)
        {
           // Call the other (sister) constructor.
           this(val, null);          
        }
    }  
  
    private Node first; // list head
    private Node last;   // last element in list
       
    /**
       Constructor.
    */
  
    public LinkedList1()
    {
        first = null;
        last = null;      
    }
  
    /**
       The isEmpty method checks to see
       if the list is empty.
       @return true if list is empty,
       false otherwise.
    */
  
    public boolean isEmpty()
    {      
        return first == null;     
    }
  
    /**
       The size method returns the length of the list.
       @return The number of elements in the list.
    */
  
    public int size()
    {
       int count = 0;
       Node p = first;   
       while (p != null)
       {
           // There is an element at p
           count ++;
           p = p.next;
       }
       return count;
    }
  
    /**
       The add method adds an element to
       the end of the list.
       @param e The value to add to the
       end of the list.     
    */
  
    public void add(String e)
    {
      if (isEmpty())
      {
          first = new Node(e);
          last = first;
      }
      else
      {
          // Add to end of existing list
          last.next = new Node(e);
          last = last.next;
      }    
    }
  
    /**
       The add method adds an element at a position.
       @param e The element to add to the list.
       @param index The position at which to add
       the element.
       @exception IndexOutOfBoundsException When
       index is out of bounds.
    */
  
    public void add(int index, String e)
    {
         if (index < 0 || index > size())
         {
             String message = String.valueOf(index);
             throw new IndexOutOfBoundsException(message);
         }
       
         // Index is at least 0
         if (index == 0)
         {
             // New element goes at beginning
             first = new Node(e, first);
             if (last == null)
                 last = first;
             return;
         }
       
         // Set a reference pred to point to the node that
         // will be the predecessor of the new node
         Node pred = first;      
         for (int k = 1; k <= index - 1; k++)      
         {
            pred = pred.next;         
         }
       
         // Splice in a node containing the new element
         pred.next = new Node(e, pred.next);
       
         // Is there a new last element ?
         if (pred.next.next == null)
             last = pred.next;       
    }
  
    /**
       The toString method computes the string
       representation of the list.
       @return The string form of the list.
    */
  
    public String toString()
    {
      StringBuilder strBuilder = new StringBuilder();
    
      // Use p to walk down the linked list
      Node p = first;
      while (p != null)
      {
         strBuilder.append(p.value + \"\ \");
         p = p.next;
      }    
      return strBuilder.toString();
    }
  
    /**
       The remove method removes the element at an index.
       @param index The index of the element to remove.
       @return The element removed.
       @exception IndexOutOfBoundsException When index is
                  out of bounds.   
    */
  
    public String remove(int index)
    {
       if (index < 0 || index >= size())
       {
           String message = String.valueOf(index);
           throw new IndexOutOfBoundsException(message);
       }
     
       String element; // The element to return   
       if (index == 0)
       {
          // Removal of first item in the list
          element = first.value;  
          first = first.next;
          if (first == null)
              last = null;           
       }
       else
       {
          // To remove an element other than the first,
          // find the predecessor of the element to
          // be removed.
          Node pred = first;
        
          // Move pred forward index - 1 times
          for (int k = 1; k <= index -1; k++)
              pred = pred.next;
        
          // Store the value to return
          element = pred.next.value;
        
          // Route link around the node to be removed
          pred.next = pred.next.next;
        
          // Check if pred is now last
          if (pred.next == null)
              last = pred;            
       }
       return element;      
    }
  
    /**
       The remove method removes an element.
       @param element The element to remove.
       @return true if the remove succeeded,
       false otherwise.
    */
  
    public boolean remove(String element)
    {
       if (isEmpty())
           return false;    
    
       if (element.equals(first.value))
       {
          // Removal of first item in the list
          first = first.next;
          if (first == null)
              last = null;     
          return true;
       }
    
      // Find the predecessor of the element to remove
      Node pred = first;
      while (pred.next != null &&
             !pred.next.value.equals(element))
      {
          pred = pred.next;
      }

      // pred.next == null OR pred.next.value is element
      if (pred.next == null)
          return false;
    
      // pred.next.value is element
      pred.next = pred.next.next;  
    
      // Check if pred is now last
      if (pred.next == null)
          last = pred;
    
      return true;     
    }
  
    public static void main(String [] args)
    {
        LinkedList1 ll = new LinkedList1();
        ll.add(\"Amy\");
        ll.add(\"Bob\");
        ll.add(0, \"Al\");
        ll.add(2, \"Beth\");
        ll.add(4, \"Carol\");
        System.out.println(\"The members of the list are:\");
        System.out.print(ll);
    }
}

/**
   The DLinkedList class implements a doubly
   Linked list.
*/

class DLinkedList
{
    /**
       The Node class stores a list element
       and a reference to the next node.
    */
    private class Node
    {
        String value;   // Value of a list element
        Node next;      // Next node in the list
        Node prev;      // Previous element in the list
      
        /**
           Constructor.          
           @param val The element to be stored in the node.
           @param n The reference to the successor node.
           @param p The reference to the predecessor node.
        */
      
        Node(String val, Node n, Node p)
        {
            value = val;
            next = n;
            prev = p;
        }
         
        /**
           Constructor.
           @param val The element to be stored in the node.
        */
      
        Node(String val)
        {
           // Just call the other (sister) constructor
           this(val, null, null);          
        }
    }
  
    private Node first;   // Head of the list
    private Node last;    // Last element on the list
  
    /**
       Constructor.
    */
  
    public DLinkedList()
    {
        first = null;
        last = null;      
    }

    /**
       The isEmpty method checks to see if the list
       is empty.
       @return true if list is empty, false otherwise.
    */
  
    public boolean isEmpty()
    {      
        return first == null;
    }
  
    /**
       The size method returns the length of the list.
       @return The number of elements in the list.
    */
  
    public int size()
    {
       int count = 0;
       Node p = first;
       while (p != null)
       {
           // There is an element at p
           count ++;
           p = p.next;
       }
       return count;
    }
  
    /**
       The add method adds to the end of the list.
       @param e The value to add.     
    */
  
    public void add(String e)
    {
      if (isEmpty())
      {
          last = new Node(e);
          first = last;
      }
      else
      {
          // Add to end of existing list
          last.next = new Node(e, null, last);
          last = last.next;       
      }    
    }
  
    /**
       This add method adds an element at an index.
       @param e The element to add to the list.
       @param index The index at which to add.
       @exception IndexOutOfBoundsException
       When the index is out of bounds.
    */
  
    public void add(int index, String e)
    {
         if (index < 0 || index > size())
         {
             String message = String.valueOf(index);
             throw new IndexOutOfBoundsException(message);
         }
       
         // Index is at least 0
         if (index == 0)
         {
             // New element goes at beginning
             Node p = first;            // Old first
             first = new Node(e, p, null);
             if (p != null)
                 p.prev = first;           
             if (last == null)
                 last = first;
             return;
         }
       
         // pred will point to the predecessor
           // of the new node.
         Node pred = first;     
         for (int k = 1; k <= index - 1; k++)      
         {
            pred = pred.next;         
         }
       
         // Splice in a node with the new element
         // We want to go from pred-- succ to
         // pred--middle--succ
         Node succ = pred.next;
         Node middle = new Node(e, succ, pred);
         pred.next = middle;
         if (succ == null)           
             last = middle;     
         else          
             succ.prev = middle;                   
    }
  
    /**
       The toString method computes the string
       representation of the list.
       @return The string representation of the
       linked list.
    */
  
    public String toString()
    {
      StringBuilder strBuilder = new StringBuilder();
    
      // Use p to walk down the linked list
      Node p = first;
      while (p != null)
      {
         strBuilder.append(p.value + \"\ \");
         p = p.next;
      }    
      return strBuilder.toString();
    }
  
    /**
       The remove method removes the element
       at a given position.
       @param index The position of the element
       to remove.
       @return The element removed.
       @exception IndexOutOfBoundsException When      
       index is out of bounds.
    */
  
    public String remove(int index)
    {
       if (index < 0 || index >= size())
       {
          String message = String.valueOf(index);
          throw new IndexOutOfBoundsException(message);
       }          
    
       // Locate the node targeted for removal
       Node target = first;
       for (int k = 1; k <= index; k++)
           target = target.next;
     
       String element = target.value; // Element to return
       Node pred = target.prev;        // Node before the target
       Node succ = target.next;        // Node after the target
     
       // Route forward and back pointers around
       // the node to be removed
       if (pred == null)     
           first = succ;
       else
           pred.next = succ;
     
       if (succ == null)
           last = pred;
       else
           succ.prev = pred;
     
       return element;      
    }
  
    /**
       The remove method removes an element from the list.
       @param element The element to remove.
       @return true if the element was removed, false otherwise.
    */
  
    public boolean remove(String element)
    {
       if (isEmpty())
           return false;    
    
       // Locate the node targeted for removal
       Node target = first;
       while (target != null
               && !element.equals(target.value))
           target = target.next;
     
       if (target == null)
           return false;     
    
       Node pred = target.prev;        // Node before the target
       Node succ = target.next;        // Node after the target
     
       // Route forward and back pointers around
       // the node to be removed
       if (pred == null)     
           first = succ;
       else
           pred.next = succ;
     
       if (succ == null)
           last = pred;
       else
           succ.prev = pred;    
  
        return true;     
    }
  
    public static void main(String [] args)
    {
        DLinkedList ll = new DLinkedList();
        ll.add(\"Amy\");
        ll.add(\"Bob\");
        ll.add(0, \"Al\");
        ll.add(2, \"Beth\");
        ll.add(4, \"Carol\");
        System.out.println(\"The elements of the list are:\");
        System.out.println(ll);
    }

}

Find the error
Find the error in correct in class below in each of the following code segments.
// Print the second element on
// a list myList of 3 elements
Node ref = myList; ref ++ ;
ref = ref.next;
System.out.print(ref.value);
2. // Print all elements in a list myList
Node ref = myList;
while (ref.next != null) {
System.out.print(ref.value + \" \"); }
3. // Add a node to the beginning of
// a doubly linked list
myList myList = new Node(\"Abraham\", myList, null);

4. // Remove the first node of a nonempty
// doubly linked list
myList myList = myList.next;
5. // The reference last points to the last
// node in a nonempty doubly linked list.
// Remove the last node from the list l
ast = last.prev;


Algorithm Workbench
1. Write a recursive method void print(Node ref) that prints the values of all ele- ments in the linked list whose first node is ref.
2. Write a nonrecursive method reverse() that reverses the order of the elements in a list. Assume that this method is to be added to the LinkedList1 class in this chapter.
3. Write a method reverse() as in Algorithm Workbench 2, except implement the method to call a private recursive method Node reverse(Node list). Implement this recursive method as well.
4. Add a method String removeMin() to the LinkedList1 class in this chapter. The method removes and returns the minimum string (according to the usual dictionary order on strings) from the list. If the list is empty, the method returns null.

Solution

1)

public void print(Node ref){
   if(ref == null){
       return;
   }
   if(ref == first){
       System.out.print(ref.val);
       print(ref.next);
   }
   else{
       System.out.print(ref.val);
       print(ref.next);
   }
}
-----------------------------------------------------------------------------------------

2)
public void reverse() {
   Node prev = null, next = null;;
   if (first == null) return;
   while (true) {
       next = first.getNext();
       first.setNext(prev);
       prev = first;
       if (next == null) return;
       first = next;
   }
}

---------------------------------------------------------------------------------------------
3)
Node reverse(Node first) {
// checking head null or not
if ( (first==null) || (first.next == null) ) return first;

// calling recursively
Node reverse = reverse(first.next);

// pointing to last element
first.next.next = first;

// pointling last node to nu
first.next = null;
return reverse;
}
----------------------------------------------------------------------------------------------
4)
public void removeMin() {
Node mini = first;
Node tempNode = first;
Node prev = null;

while(tempNode != null) {
if(tempNode.next != null && tempNode.next.data < mini.data){
mini = tempNode.next;
prev = tempNode;
}
tempNode = tempNode.next;
}

if(mini != first) { // if head node is not minimum
prev.next = mini.next;
} else {
first = first.next; //else updating minimum value
}
}

/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private
/** The LinkedList1 class implements a Linked list. */ class LinkedList1 { /** The Node class stores a list element and a reference to the next node. */ private

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site