Untitled
/** * A linked list to store strings. * * @author Marcus */ public class LinkedStringList implements StringList { /** * An item in the linked list. * * @author Marcus */ public static class Item { /** * The string stored in the item. */ private final String string; /** * The next element in the list or * null, if this is the last element. */ private Item next; /** * Creates an item to store the string. * * @param string The string to store. */ public Item(String string) { this.string = string; } /** * Returns the string stored in the item. * * @return The string stored in the item. */ public String getString() { return string; } /** * Returns the next item in the list or * null, if this is the last item. * * @return The next item. */ public Item getNext() { return next; } /** * Sets the next item of the list. * * @param next The value for the next item. */ public void setNext(Item next) { this.next = next; } } /** * The head (i.e. first element) of the * list or null, if the list is empty. */ private Item head; /** * Creates a new, empty list. */ public LinkedStringList() { super(); } @Override public String getFirstString() { // check if empty if (head == null) return null; // else return string in first element return head.getString(); } @Override public void appendString(String text) { if(head == null) { head = new Item(text); } else { Item pointer = head; while (pointer.getNext() !=null) { pointer = pointer.getNext(); } pointer.setNext(new Item(text)); } } @Override public String getStringAt(int i) { int currentIndex = 0; if(head != null && i<countElements()) { Item pointer = head; while(currentIndex < i) { pointer = pointer.getNext(); currentIndex++; } return pointer.getString(); } else { return null; } } @Override public void insertStringAt(int i, String text) { int currentIndex = 1; Item newItem = new Item(text); if(i>=0 && i<=countElements()) { if(i == 0) { Item oldHead = head; head = newItem; head.setNext(oldHead); } else { Item pointer = head; while(currentIndex < i) { pointer = pointer.getNext(); currentIndex++; } Item old = pointer.getNext(); pointer.setNext(newItem); pointer.getNext().setNext(old); } } } @Override public void insertStringListAt(int i, StringList list) { int currentIndex = 0; if(i>= 0 && i<=countElements()) { if(i==0) { Item oldHead = head; head = new Item(list.getFirstString()); Item pointer = head; for(int k = 1; k<list.countElements(); k++) { pointer.setNext(new Item(list.getStringAt(k))); pointer = pointer.getNext(); } pointer.setNext(oldHead); } else { Item pointer = head; while(pointer.getNext() != null && currentIndex < i-1) { pointer = pointer.getNext(); currentIndex++; } Item oldI = pointer.getNext(); for(int k = 0; k<list.countElements(); k++) { pointer.setNext(new Item(list.getStringAt(k))); pointer = pointer.getNext(); } pointer.setNext(oldI); } } } @Override public String replaceStringAt(int i, String text) { if(i>=0 && i<countElements()) { int currentIndex =0; if(i == 0) { Item oldHead = head; Item oldHeadNext = oldHead.getNext(); head = new Item(text); head.setNext(oldHeadNext); return oldHead.getString(); } else { Item pointer = head; while(currentIndex < i-1) { pointer = pointer.getNext(); currentIndex++; } Item currentItem = pointer.getNext(); Item nextItem = currentItem.getNext(); Item previousItem = pointer; Item newItem = new Item(text); previousItem.setNext(newItem); newItem.setNext(nextItem); return currentItem.getString(); } } else { return null; } } @Override public String removeStringAt(int i) { if(i>=0 && i<countElements()) { int currentIndex = 0; if(i == 0) { Item newHead = head.getNext(); Item oldHead = head; head = newHead; return oldHead.getString(); } else { Item pointer = head; while(currentIndex <i-1 && pointer != null) { pointer = pointer.getNext(); currentIndex++; } Item currentItem = pointer.getNext(); Item nextItem = currentItem.getNext(); pointer.setNext(nextItem); return currentItem.getString(); } } else { return null; } } @Override public String getLastString() { if(countElements() == 0) { return null; } else { Item pointer = head; while(pointer.getNext() != null) { pointer = pointer.getNext(); } return pointer.getString(); } } @Override public StringList reverseStringList() { LinkedStringList newList = new LinkedStringList(); newList.head = new Item(this.getLastString()); Item pointer = newList.head; for(int i = 1; i<this.countElements();i++) { pointer.setNext(new Item(this.getStringAt(this.countElements()-i-1))); pointer = pointer.getNext(); } return newList; } @Override public int getIndexOfString(String text, int from) { int currentIndex = 0; boolean nichtGefunden = false; if(from >=0&&from<countElements()) { Item pointer = head; while(currentIndex<from && pointer.getNext() != null) { pointer = pointer.getNext(); currentIndex++; } while(pointer.getNext() != null && currentIndex < countElements()) { if(pointer.getString().equals(text)) { nichtGefunden = false; break; } else { pointer = pointer.getNext(); currentIndex++; if(pointer.getString().equals(text)) { nichtGefunden = false; break; } nichtGefunden = true; } } if(nichtGefunden == false) { return currentIndex; } else { return -1; } } else { return -1; } } @Override public int countElements() { if(head == null) { return 0; } else { int counter = 1; Item pointer = head; while(pointer.getNext() != null) { pointer = pointer.getNext(); counter = counter + 1; } return counter; } } @Override public String[] toStringArray() { String[] array = new String[countElements()]; if(head != null) { array[0] = head.getString(); Item pointer = head; for(int i = 1; i<countElements(); i++) { array[i] = pointer.getNext().getString(); pointer = pointer.getNext(); } return array; } else { return array; } } }
Leave a Comment