SimpleLinkedList.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import java.util.NoSuchElementException;
  2. public class SimpleLinkedList<E> implements SimpleList<E> {
  3. private class Node {
  4. E element;
  5. Node next;
  6. }
  7. private Node head;
  8. private Node tail;
  9. private int size;
  10. @Override
  11. public void addFirst(E elem) {
  12. Node n = new Node();
  13. n.element = elem;
  14. if (head == null) {
  15. head = tail = n;
  16. } else {
  17. n.next = head;
  18. head = n;
  19. }
  20. size++;
  21. }
  22. @Override
  23. public E removeFirst() {
  24. if (head == null) {
  25. return null;
  26. }
  27. E element = head.element;
  28. head = head.next;
  29. if (head == null) {
  30. tail = null;
  31. }
  32. size--;
  33. return element;
  34. }
  35. @Override
  36. public E removeLast() {
  37. if (head == null) {
  38. throw new NoSuchElementException("Empty List");
  39. } else {
  40. E element = tail.element;
  41. if (size == 1) {
  42. head = tail = null;
  43. } else {
  44. Node walker = head;
  45. while (walker.next != tail) {
  46. walker = walker.next;
  47. }
  48. walker.next = null;
  49. tail = walker;
  50. }
  51. size--;
  52. return element;
  53. }
  54. }
  55. @Override
  56. public void addLast(E elem) {
  57. Node n = new Node();
  58. n.element = elem;
  59. if (tail == null) {
  60. head = tail = n;
  61. } else {
  62. tail.next = n;
  63. tail = n;
  64. }
  65. size++;
  66. }
  67. }