Untitled

 avatar
unknown
plain_text
2 months ago
6.8 kB
2
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) {
		
		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);
				
				
				
				
			}
				
			
		}
		
		
		
	}

	@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 && from < countElements()) {
				if(pointer.getString().equals(text)) {
					nichtGefunden = false;
					break;
				}
				else {
					pointer = pointer.getNext();
					currentIndex++;
					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