Skip to content

Instantly share code, notes, and snippets.

@AnnaBoro
Last active December 13, 2015 21:01
Show Gist options
  • Save AnnaBoro/18b6f7c57ece8f9769c7 to your computer and use it in GitHub Desktop.
Save AnnaBoro/18b6f7c57ece8f9769c7 to your computer and use it in GitHub Desktop.
MyList5 + Iterator
package lesson7.mylist;
public class Launcher {
public static void main(String[] args) {
SimpleLinkedList sl = new SimpleLinkedList();
sl.addFirst("object1");
sl.addFirst("object2");
sl.addFirst("object3");
sl.addLast("object4");
sl.addLast("object5");
sl.addAfter("object4", "fff");
sl.addAfter("object5", "aaa");
sl.addLast("object4");
for (Object o : sl) {
System.out.println(o);
}
}
}
package lesson7.mylist;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;
public class SimpleLinkedList implements Iterable<Object> {
private Node root;
private int size;
public SimpleLinkedList() {
size = 0;
}
public void addFirst(Object o) {
Node node = new Node();
node.object = o;
if(root != null) {
node.node = root;
}
root = node;
size++;
}
public void addLast(Object o) {
Node nodeNew = new Node();
nodeNew.object = o;
if (root != null) {
Node gapNode = root.node;
Node gap = root.node;
while (gapNode != null) {
gap = gapNode;
gapNode = gapNode.node;
}
gap.node = nodeNew;
size++;
}
else addFirst(o);
}
public void addAfter(Object after, Object newObj) throws IllegalStateException {
Node nodeNew = new Node();
nodeNew.object = newObj;
if (root != null) {
Node gapNode = root.node;
Node gap = root.node;
boolean isTrueObject = false;
while (gapNode != null) {
if (gapNode.object.equals(after)) {
isTrueObject = true;
break;
}
gap = gapNode;
gapNode = gapNode.node;
}
if (isTrueObject == false) {
throw new IllegalStateException("There is not such element");
}
else if (gap.node == null) {
addLast(newObj);
}
else {
Node afterNew = gapNode.node;
gapNode.node = nodeNew;
nodeNew.node = afterNew;
size++;
}
}
else addFirst(newObj);
}
public int getSize() {
return size;
}
public void printList(Iterator iterator) {
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
@Override
public Iterator<Object> iterator() {
return new SLLIterator();
}
private class Node {
private Object object;
private Node node;
public Node() {
}
}
private class SLLIterator implements Iterator<Object> {
private Node n;
public SLLIterator() {
n = new Node();
n.node = root;
}
@Override
public boolean hasNext() {
if (n.node != null) {
return true;
}
else {
return false;
}
}
@Override
public Object next() {
if (hasNext()) {
n = n.node;
return n.object;
}
else {
throw new NoSuchElementException();
}
}
@Override
public void remove() {
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment