Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

public class LinkedList { private Node front; //private int count; //private Nod

ID: 3860558 • Letter: P

Question

public class LinkedList {
   private Node front;
   //private int count;
   //private Node end;

   public LinkedList(Node f) {
       front = f;
   }

   public LinkedList() {
   front = null;

}

   public void addToFront(String d) {
       Node n = new Node(d, front);
       front = n;
   }
  
   public boolean isEmpty() {
       if(front == null)
           return true;
       else
           return false;
   }
     
  
   public void clear() {
       front = null;
  
   }
  
   public String getFrontData() {
       return front.getData();
  
   }
  
   public Node getFrontNode() {
       return front;
  
   }
     
   public String toString() {
       String ts = "[";
       Node cur = front;
       while(cur != null) {
           ts += cur;
           cur = cur.getNext();
       }
       return ts + "]";
   }
  
  
   public int size() {
       int count = 0;
       Node cur = front;
       while(cur != null) {
           count++;
           cur = cur.getNext();
       }
       return count;
   }
  
  
  
   public void removeFront() {
       if(!isEmpty())
           front = front.getNext();
      
       // else
       //   System.out.println(No front to remove!);
  
   }
  
  
   public void addToEnd(String d) {
       Node n = new Node(d, null);
       if(isEmpty())
           front = n;
       else {
           Node cur = front;
           while(cur.getNext() != null)
               cur = cur.getNext();
           cur.setNext(n);
       }
   }
  
  
   public void removeLast() {
       if(!isEmpty()) {
           if(front.getNext() == null)
               front = null;
           else {
               Node cur = front;
               while(cur.getNext() != null)
                   cur = cur.getNext();
               cur.setNext(null);
           }
       //} else { System.out.println(No end to remove!);
       }
   }
  
   public int contains(String d) {
       Node cur = front;
       boolean found = false;
       int index = -1;
  
       while(cur != null && !found) {
           index++;
           if(cur.getData().equals(d))
               found = true;
           cur = cur.getNext();
       }
       if(!found)
           index = -1;
       return index;
   }
  
  
   public void add(int index, String d) {
       if(index >= 0 && index <= size() ) {
           if(index == 0)
               addToFront(d);
           else {
               Node cur = front;
               for(int i=0; i<index-1; i++)
                   cur = cur.getNext();
               Node n = new Node(d, cur.getNext());
               cur.setNext(n);
   }
       }
       //else { System.out.println(index out of bounds!); }
   }
  
  
  
   public void remove(int index) {
       if(index >= 0 && index <= size() ) {
           if(index == 0)
               removeFront();
           else if(index == size()-1)
               removeLast();
           else {
               Node cur = front;
               for(int i=0; i<index-1; i++)
                   cur = cur.getNext();
               cur.setNext(cur.getNext().getNext());
           }
       }
       //else { System.out.println(index out of bounds!); }
   }
  
  
   public Node getNode(int index) {
       Node cur = null;
       if(index >= 0 && index <= size() ) {
           if(index == 0)
               cur = front;
           else {
               cur = front;
               for(int i=0; i<index; i++)
                   cur = cur.getNext();
           }
       } // else { System.out.println(index out of bounds!); }
       return cur;
   }
  
  
  
  
  
   public void addAll(LinkedList other) {
       Node cur = other.getFrontNode();
       while(cur != null) {
           addToEnd(cur.getData());
           cur = cur.getNext();
       }
   }
  
  
  
   public static LinkedList merge(LinkedList first, LinkedList second) {
       LinkedList result = new LinkedList();
  
       Node cur = first.getFrontNode();
       while(cur != null) {
           result.addToEnd(cur.getData());
           cur = cur.getNext();
       }
  
       cur = second.getFrontNode();
       while(cur != null) {
           result.addToEnd(cur.getData());
           cur = cur.getNext();
       }
       return result;
   }
  
  
  
   public LinkedList subList(int start, int end) {
       LinkedList result = new LinkedList();
       if(!(start >= end || start < 0 || start > size() || end >= size() )) {
           Node cur = getFrontNode();
           for(int i=0; i<start; i++) {
               cur = cur.getNext();
           }
           for(int i=start; i<=end; i++) {
               addToEnd(cur.getData());
               cur = cur.getNext();
           }
       }
       return result;
   }
  
  
   public static LinkedList union(LinkedList first, LinkedList second) {
       LinkedList result = new LinkedList();
       Node cur = first.getFrontNode();
       while(cur != null) {
           result.addToEnd(cur.getData());
           cur = cur.getNext();
       }
  
       cur = second.getFrontNode();
       while(cur != null) {
           if(result.contains(cur.getData()) == -1)
               result.addToEnd(cur.getData());
           cur = cur.getNext();
       }
  
       return result;
   }
  
   public static LinkedList intersection(LinkedList first, LinkedList second) {
       LinkedList result = new LinkedList();
       Node cur = first.getFrontNode();
       while(cur != null) {
           if(second.contains(cur.getData()) != -1)
               result.addToEnd(cur.getData());
           cur = cur.getNext();
       }
  
  
       return result;
   }


}

public class Node {
   private String data;
   private Node next;

   public Node(String d, Node n ) {
       data = d;
       next = n;
   }
  
   // The usual get/set methods, plus toString()
   public void setData(String d) {
       data = d;
   }
  
   public void setNext(Node n) {
       next = n;
   }
  
   public String getData() {
       return data;
   }
  
   public Node getNext() {
       return next;
   }
  
   public String toString() {
       return data + " --> ";
   }
}

In class, we wrote an implementation for a Stack class using an ArrayList to store the underlying data. Write your own Stack class (Stack.java) that uses a LinkedList to store the underlying (String) data. Your implementation should have (at least) a constructor, a push method, a pop method, and a peek method. The LinkedList class you use should be based off of the version we wrote in class (i.e., not using a Java standard library version).-

Explanation / Answer


/**
*
* @author Sam
*/
public class LinkedListStack {
    LinkedList stack;

    public LinkedListStack() {
        stack = new LinkedList();
    }
  
    public void push(String data) {
        stack.addToFront(data);
    }
  
    public String pop() {
        String result = stack.getFrontData();
        stack.removeFront();
        return result;
    }
  
    public String peek() {
        return stack.getFrontData();
    }
  
}

This should do its job (as a stack) :D

-----------------------------UPDATE----------------------------


class StackDriver {
    public static void main(String[] args) throws IOException {
        LinkedListStack stack = new LinkedListStack();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        boolean loop = true;
        while (loop) {
            System.out.println("1. Push "
                    + "2. Pop "
                    + "3. Peek "
                    + "4. Exit "
                    + "Enter choice[1-4]: ");
            int choice = Integer.parseInt(br.readLine());
            switch(choice) {
                case 1:
                    System.out.print("Enter sting to push: ");
                    stack.push(br.readLine());
                    break;
                case 2:
                    System.out.println("'" + stack.pop() + "' popped");
                    break;
                case 3:
                    System.out.println("'" + stack.peek() + "' peeked");
                    break;
                case 4:
                    loop = false;
                    break;
                default:
                    System.out.println("Wrong choice!");
            }
        }
    }
}