Complete in Java CardApp.java public class CardApp { private LinkedList list; /** * User interface prompts user, reads and writes files. */ public static void main(String[] args) { } /** * Default constructor to initialize the deck */ public CardApp() { } /** * Inserts a new Card into the deck * @param card a playing Card */ public void addCard(Card card) { } /** * Shuffles cards following this algorithm: * First swaps first and last card * Next, swaps every even card with the card 3 * nodes away from that card. Stops when it * reaches the 3rd to last node * Then, swaps ALL cards with the card that is * 2 nodes away from it, starting at the 2nd card * and stopping stopping at the 3rd to last node */ public void shuffle() { } /** * Implements the bubble sort algorithm * to sort cardList into sorted order, first by suit * (alphabetical order) * then by rank from 2 to A */ public void sort() { } /** * Returns the deck of cards with each card separated * by a blank space and a new line character at the end. * @return The deck of cards as a string. */ @Override public String toString() { return ""; } } Card.java public class Card implements Comparable{ private String rank; private String suit; /** * Constructor for the Card class * @param rank the rank of card from 2 to A * @param suit the suit of card C, D, H, or S */ public Card(String rank, String suit) { } /** * Returns the card's rank * @return rank a rank from 2 (low) to A (high) */ public String getRank() { return ""; } /** * Returns the card's suit * @return C, D, H, or S */ public String getSuit() { return ""; } /** * Updates the card's rank * @param rank a new rank */ public void setRank(String rank) { } /** * Updates the card's suit * @param suit the new suit */ public void setSuit(String suit) { } /** * Concatenates rank and suit * @return card rank and suit */ @Override public String toString() { return ""; } /** * Overrides the equals method for Card * Compares rank and suit and * follows the equals formula given in * Lesson 4 and also in Joshua Block's text * @param obj another Object to compare for * equality * @return whether obj is a Card and, if so, * of equal rank and suit */ @Override public boolean equals(Object obj) { return false; } /** * Orders two cards first by suit (alphabetically) * Next by rank. "A" is considered the high card * Order goes 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A * @param card another Card to compare to this Card * @return a negative number if this comes before c * and a positive number if c comes before this * and 0 if this and c are equal according to the above * equals method */ @Override public int compareTo(Card card) { return -1; } } } LinkedList.Java import java.util.NoSuchElementException; public class LinkedList { private class Node { private T data; private Node next; private Node prev; public Node(T data) { this.data = data; this.next = null; this.prev = null; } } private int length; private Node first; private Node last; private Node iterato.