Data Structure - Using java
Linked List
eivj
2018. 5. 22. 05:51
Item Wrapper
public class MyLinkedNode<E> { private E item; private MyLinkedNode<E> next; public MyLinkedNode(E item) { this.item = item; } public E getItem() { return item; } public MyLinkedNode<E> getNext() { return next; } public void setNext(MyLinkedNode<E> next) { this.next = next; } @Override public String toString() { return String.format("MyNode [item=%s]", item); } }Item Container
public class MyLinkedList<E> { private MyLinkedNode<E> head; private int size; public int getSize() { return size; } public MyLinkedNode<E> find(E item) { MyLinkedNode<E> search = head; while (search != null) { if (search.getItem().equals(item)) { break; } search = search.getNext(); } return search; } public MyLinkedNode<E> getItemByIdx(int index) { if (index < 0) return null; MyLinkedNode<E> search = head; for (int i = 0; i < index; i++) { search = search.getNext(); if (search == null) break; } return search; } public void addFirst(E newItem) { if (newItem == null) return; MyLinkedNode<E> newNode = new MyLinkedNode<>(newItem); if (head != null) { newNode.setNext(head); } head = newNode; size++; } public void addAfter(E prev, E newItem) { if (prev == null) return; if (newItem == null) return; MyLinkedNode<E> newNode = new MyLinkedNode<>(newItem); MyLinkedNode<E> search = find(prev); if (search != null) { newNode.setNext(search.getNext()); search.setNext(newNode); size++; } } public void addByIndex(int index, E newItem) { if (index < 0) return; if (index > size) return; if (index == 0) { addFirst(newItem); } else { MyLinkedNode<E> prevFoundItem = getItemByIdx(index - 1); if (prevFoundItem == null) return; addAfter(prevFoundItem.getItem(), newItem); } } public void removeFirst() { if(head != null) { head = head.getNext(); size--; } } public void removeAfter(E prev) { if (prev == null) return; MyLinkedNode<E> search = find(prev); if (search == null || search.getNext() == null) { return; } search.setNext(search.getNext().getNext()); size--; } public void removeByIndex(int index) { if (index < 0) return; if (index >= size) return; if (index == 0) { removeFirst(); } else { MyLinkedNode<E> prevFoundItem = getItemByIdx(index - 1); if (prevFoundItem == null) return; removeAfter(prevFoundItem.getItem()); } } public void removeItem(E item) { if (item == null) return; MyLinkedNode<E> search = head; MyLinkedNode<E> searchPrev = null; while (search != null) { if (search.getItem().equals(item)) { break; } searchPrev = search; search = search.getNext(); } if(search == null) return; if(searchPrev == null) { removeFirst(); return; } removeAfter(searchPrev.getItem()); } @Override public String toString() { StringBuilder builder = new StringBuilder(); MyLinkedNode<E> search = head; while (search != null) { builder.append(search.toString()); builder.append("\n"); search = search.getNext(); } builder.append("total size = " + size); return builder.toString(); } }