LinkedList.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. * An implementation of the Linked List data structure.
  3. *
  4. * The LinkedList is like the ArrayList, except the list's
  5. * elements are stored in linked nodes instead of an array.
  6. *
  7. * @param <E> component type
  8. */
  9. public class LinkedList<E> {
  10. public static void main(String[] args) {
  11. LinkedList<Integer> list = new LinkedList<>();
  12. for (int i = 2; i <= 20; i += 2) list.add(i);
  13. System.out.println(list);
  14. System.out.println(list.get(4)); // should print 10
  15. }
  16. // The list's elements are stored in nodes.
  17. private class Node {
  18. E element; // Element stored in this node
  19. Node next; // Link to the next node in the list
  20. }
  21. private Node head; // Link to the first node
  22. private Node tail; // Link to the last node
  23. private int size; // Number of elements in the list
  24. public void add(E elem) {
  25. Node n = new Node();
  26. n.element = elem;
  27. if (head == null) head = tail = n;
  28. else {
  29. tail.next = n;
  30. tail = n;
  31. }
  32. size++;
  33. }
  34. public E get(int index) {
  35. if (index < 0 || index >= size) throw new IndexOutOfBoundsException(
  36. index + ""
  37. );
  38. Node walker = head;
  39. for (int i = 0; i < index; i++) walker = walker.next;
  40. return walker.element;
  41. }
  42. public void set(int index, E element) {
  43. if (index < 0 || index >= size) throw new IndexOutOfBoundsException(
  44. index + ""
  45. );
  46. Node walker = head;
  47. for (int i = 0; i < index; i++) walker = walker.next;
  48. walker.element = element;
  49. }
  50. public E get(E element) {
  51. Node walker = head;
  52. for (int i = 0; i < size; i++) {
  53. if (walker.element.equals(element)) {
  54. return walker.element;
  55. }
  56. walker = walker.next;
  57. }
  58. return null;
  59. }
  60. public boolean contains(E element) {
  61. Node walker = head;
  62. for (int i = 0; i < size; i++) {
  63. if (walker.element.equals(element)) {
  64. return true;
  65. }
  66. walker = walker.next;
  67. }
  68. return false;
  69. }
  70. public int size() {
  71. return size;
  72. }
  73. @Override
  74. public String toString() {
  75. if (head == null) return "[]";
  76. else {
  77. String s = "[";
  78. Node walker = head;
  79. while (walker != tail) {
  80. s += walker.element + ", ";
  81. walker = walker.next;
  82. }
  83. s += tail.element + "]";
  84. return s;
  85. }
  86. }
  87. }