/************************************************************* * Code for a circular linked list. Each node of the linked * list is a Card class defined within this class. *************************************************************/ public class CircularQuoteSolution { // the first card in the circular linked list private Card start; // helper linked-list data type private class Card { private String word; private Card next; public Card(String word) { this.word = word; this.next = null; } } // create an empty quote public CircularQuoteSolution() { start = null; } // add the specified word to the end of the quote public void addWord(String word) { Card newWord = new Card(word); // degenerate case for empty Quote if (start == null) { start = newWord; start.next = start; } // otherwise else { // find the current last word Card card = start; do { card = card.next; } while (card.next != start); // insert new word newWord.next = start; card.next = newWord; } } // number of words in the quote public int count() { // empty quote if (start == null) return 0; Card card = start; int total = 0; do { total++; card = card.next; } while (card != start); return total; } // the ith word in the quote (where i = 1 is the first word) public String getWord(int i) { if (i > count() || i <= 0) throw new RuntimeException("index out of bounds"); Card card = start; for (int j = 1; j < i; j++) { card = card.next; } return card.word; } // insert the specified word after the ith word (where i = 1 is the first word) public void insertWord(int i, String word) { if (i > count() || i <= 0) throw new RuntimeException("index out of bounds"); Card newWord = new Card(word); // find the ith card Card card = start; for (int j = 1; j < i; j++) { card = card.next; } // insert between card and card.next newWord.next = card.next; card.next = newWord; } // string representation of the entire quote public String toString() { String s = ""; if (start == null) return s; Card card = start; do { s = s + card.word + " "; card = card.next; } while (card != start); return s; } // test client public static void main(String[] args) { CircularQuoteSolution quote = new CircularQuoteSolution(); quote.addWord("A"); quote.addWord("rose"); quote.addWord("is"); quote.addWord("a"); quote.addWord("rose."); SdtOut.println(quote); StdOut.println(quote.count()); StdOut.println(quote.getWord(2)); quote.insertWord(3, "just"); StdOut.println(quote); StdOut.println(quote.count()); } }