Please write this in java using a GUI Implement a class call
Solution
public class Node<V>
 {
 // instance variables
 private V element;
 private Node<V> next;
  
 public Node()
 {
 this (null, null);
 }
   
 public Node(V element, Node<V> next)
 {
 this.element = element;
 this.next = next;
 }
// set/get methods
 public V getElement()
 {
 return element;
 }
 public Node<V> getNext()
 {
 return next;
 }
 public void setElement(V element)
 {
 this.element = element;
 }
 public void setNext(Node<V> next)
 {
 this.next = next;
 }
}
public class SLinkedList<V>
 {
 // instance variables. Add the tail reference.
 protected Node<V> head, tail;
 protected long size;
// methods, empty list constructor first
 public SLinkedList ()
 {
 head = null;
 tail = null;
 size = 0;
 }
// method to add nodes to the list.
 public void addFirst (Node<V> node)
 {
 // set the tail only if this is the very first node
 if (tail == null)
 tail = node;
 node.setNext (head); // make next of the new node refer to the head
 head = node; // give head a new value
 size++;
 }
// addAfter - add new node after current node, checking to see if we are at the tail
 public void addAfter (Node<V>currentNode, Node<V>newNode)
 {
 if (currentNode == tail)
 tail = newNode;
 newNode.setNext (currentNode.getNext ());
 currentNode.setNext (newNode);
 size++;
 }
// addLast - add new node after the tail node.
 public void addLast (Node<V> node)
 {
 node.setNext (null);
 tail.setNext (node);
 tail = node;
 size++;   
 }
// methods to remove nodes from the list.
 public Node<V> removeFirst ()
 {
 if (head == null)
 System.err.println(\"Error: List is empty\");
// save the one to return
 Node<V> temp = head;
// do reference manipulation
 head = head.getNext ();
 temp.setNext(null);
 size--;
return temp;
}
   
 public Node<V> removeLast ()
 {
 // // declare local variables/objects
 Node<V> nodeBefore;
 Node<V> nodeToRemove;
// make sure we have something to remove
 if (size == 0)
 System.err.println(\"Error: Attempt to remove fron an empty list\");
// traverse through the list, getting a reference to the node before
 // the trailer. Since there is no previous reference.
 nodeBefore = getFirst ();
// potential error ?? See an analysis and drawing that indicates the number of iterations
 // 9/21/10. size - 2 to account for the head and tail nodes. We want to refer to the one before the
 // tail.
 for (int count = 0; count < size - 2; count++)
 nodeBefore = nodeBefore.getNext ();
// save the last node
 nodeToRemove = tail;
// now, do the pointer manipulation
 nodeBefore.setNext (null);
 tail = nodeBefore;
 size--;
return nodeToRemove;
}
// method remove. Remove a known node from the list.
 public void remove (Node<V> nodeToRemove)
 {
 // declare local variables/references
 Node<V> nodeBefore, currentNode;
// make sure we have something to remove
 if (size == 0)
 System.err.println(\"Error: Attempt to remove fron an empty list\");
// starting at the beginning check for removal
 currentNode = getFirst ();
 if (currentNode == nodeToRemove)
 removeFirst();
 currentNode = getLast ();
 if (currentNode == nodeToRemove)
 removeLast();
// we\'ve already check two nodes, check the rest
 if (size - 2 > 0) {
 nodeBefore = getFirst ();
 currentNode = getFirst ().getNext ();
 for (int count = 0; count < size - 2; count++) {
 if (currentNode == nodeToRemove) {
 // remove current node
 nodeBefore.setNext (currentNode.getNext ());
 size--;
 break;
 }
// change references
 nodeBefore = currentNode;
 currentNode = currentNode.getNext ();
 }
 }
 }
// the gets to return the head and/or tail nodes and size of the list
 public Node<V> getFirst () { return head; }
 public Node<V> getLast () { return tail; }
 public long getSize () { return size; }
}
public class GameScores
 {
 protected String name; // name of the person earning this score
 protected int score; // the score value
 /** Constructor to create a game entry */
 public GameScores(String name, int score)
 {
 this.name = name;
 this.score = score;
 }
 /** Retrieves the name field */
 public String getName()
 {
 return name;
 }
 /** Retrieves the score field */
 public int getScore()
 {
 return score;
 }
 /** Returns a string representation of this entry */
 public String toString()
 {
 return \"(\" + name + \", \" + score + \")\";
 }
   
 }
public class GameScores
 {
 protected String name; // name of the person earning this score
 protected int score; // the score value
 /** Constructor to create a game entry */
 public GameScores(String name, int score)
 {
 this.name = name;
 this.score = score;
 }
 /** Retrieves the name field */
 public String getName()
 {
 return name;
 }
 /** Retrieves the score field */
 public int getScore()
 {
 return score;
 }
 /** Returns a string representation of this entry */
 public String toString()
 {
 return \"(\" + name + \", \" + score + \")\";
 }
   
 }
 public class GameTester
 {
 public static void main(String[] args)
 {
 GameScores entry;
 entry = new GameScores(\"Anna\", 600);   
 entry = new GameScores(\"Paul\", 720);
 System.out.println(\"TOP GAME SCORES\");
}
   
 }
public class Scores
 {
 //add function
 public SLinkedList<GameScores> add(GameScores rank, SLinkedList<GameScores> scores)
 {
 Node<GameScores> currentNode = scores.getFirst();
 Node<GameScores> nextNode = null;
 Node<GameScores> previousNode = null;
 Node<GameScores> newNode = new Node<GameScores>();
 newNode.setElement(rank);
if(scores.getSize() == 0)
 {
 scores.addFirst(newNode);
 }
 else
 {
 while(currentNode != null)
 {   
 nextNode = currentNode.getNext();
 if(nextNode == null)
 {
 scores.addLast(newNode);
 }
 else
 {
 scores.addAfter(currentNode, newNode);
 break;
 }   
 previousNode = currentNode;
 currentNode = currentNode.getNext();
 }
 }
 return scores;
 }
//remove function
 public void remove(int i)
 {
}
public void print(SLinkedList<GameScores> scores)
 {
 Node<GameScores> currentNode = scores.getFirst();
 GameScores currentEntry = currentNode.getElement();
 System.out.printf(\"[\");
 for(int i = 0; i < scores.getSize(); i++)
 {
 System.out.printf(\", %s\", currentEntry.toString());
 currentNode = currentNode.getNext();
 currentEntry = currentNode.getElement();
 }
 System.out.println(\"]\");
 }
 }






