Untitled
unknown
plain_text
10 months ago
7.4 kB
7
Indexable
/**
* 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;
}
}
}
Editor is loading...
Leave a Comment