diff --git a/Java/DoubleLinkedList.java b/Java/DoubleLinkedList.java new file mode 100644 index 0000000..8d2d879 --- /dev/null +++ b/Java/DoubleLinkedList.java @@ -0,0 +1,37 @@ + +public class DoubleLinkedList implements LinkedList { + + private Node last = null; + + private class Node { + private T item; + private Node next; + private Node previous; + } + + public boolean isEmpty() { + return last == null; + } + + public void push(final T item) { + Node oldLast = last; + last = new Node(); + last.item = item; + last.previous = oldLast; + if (oldLast != null) { + oldLast.next = last; + } + } + + public T pop() { + T item = null; + if (!isEmpty()) { + item = last.item; + last = last.previous; + if (last != null) { + last.next = null; + } + } + return item; + } +} diff --git a/Java/LinkedList.java b/Java/LinkedList.java new file mode 100644 index 0000000..0571ed4 --- /dev/null +++ b/Java/LinkedList.java @@ -0,0 +1,8 @@ + +public interface LinkedList { + + boolean isEmpty(); + void push(T item); + T pop(); + +} diff --git a/Java/SingleLinkedList.java b/Java/SingleLinkedList.java new file mode 100644 index 0000000..faf1beb --- /dev/null +++ b/Java/SingleLinkedList.java @@ -0,0 +1,30 @@ + +public class SingleLinkedList implements LinkedList { + + private Node last = null; + + private class Node { + private T item; + private Node previous; + } + + public boolean isEmpty() { + return last == null; + } + + public void push(final T item) { + Node oldLast = last; + last = new Node(); + last.item = item; + last.previous = oldLast; + } + + public T pop() { + T item = null; + if (!isEmpty()) { + item = last.item; + last = last.previous; + } + return item; + } +}