/*************************************************************
* Compilation: javac Quote.java
* Execution: java Quote
* Dependencies: none
*
* Code for a null terminated linked list. Each node of the linked
* list is a Card class defined within Quote.
* Web Exercise 4.3.1
*************************************************************/
public class Quote {
// the first card in null-terminated 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;
}
}
// constructor - create an empty quote
public Quote() {
start = null;
}
// add the word w to the end of the quote
public void addWord(String w) {
Card newWord = new Card(w);
// degenerate case when w is first word
if (start == null) start = newWord;
// otherwise, traverse list until card points to last word
else {
Card card = start;
while(card.next != null) {
card = _________________;
}
// add card for new word to end of list
_________________ = newWord;
}
}
// number of words in the quote
public int count() {
int total = 0;
for (Card card = start; ___________________;__________________)
total++;
return total;
}
// return the ith word where i = 1 is first word in quote
public String getWord(int i) {
// check for less than i words in quote or invalid index
if (count() < i || i <= 0) {
throw new RuntimeException("index out of bounds");
}
Card card = start;
for (int count = 1; __________________; __________________)
card = card.next;
return ___________________________;
}
// insert w after the ith word, where i = 1 is the first word
public void insertWord(int i, String w) {
// check for less than i words in quote or invalid index
if (count() < i || i <= 0)
throw new RuntimeException("index out of bounds");
// make Card for the new word, place it after the ith card
Card newWord = _________________________
Card card = start;
for (int j = 1; j < i; j++) {card = card.next; }
________________________________
________________________________
}
// string representation of the quote
public String toString(){
String s = "";
for (Card card = start; card != null; card = card.next)
s = s + card.word + " ";
return s;
}
public static void main(String[] args) {
Quote q = new Quote();
q.addWord("A");
q.addWord("rose");
q.addWord("is");
q.addWord("a");
q.addWord("rose.");
StdOut.println(q);
StdOut.println(q.count());
StdOut.println(q.getWord(2));
q.insertWord(3, "just");
StdOut.println(q);
StdOut.println(q.count());
}
}