ソースを参照

Merge pull request #87 from winterchord/polish_linked_list_exercise

Polish example linked-list exercise
John Ryan 10 年 前
コミット
4284bc28cd
共有3 個のファイルを変更した29 個の追加68 個の削除を含む
  1. 28
    16
      linked-list/src/example/java/Deque.java
  2. 0
    52
      linked-list/src/example/java/Element.java
  3. 1
    0
      settings.gradle

+ 28
- 16
linked-list/src/example/java/Deque.java ファイルの表示

@@ -1,45 +1,57 @@
1 1
 public final class Deque<T> {
2
-    private Element head;
2
+    private Element<T> head;
3 3
 
4 4
     public void push(T value) {
5 5
         if (head == null) {
6
-            head = new Element(value, null, null);
7
-            head.setNext(head);
8
-            head.setPrev(head);
6
+            head = new Element<>(value, null, null);
7
+            head.next = head;
8
+            head.prev = head;
9 9
             return;
10 10
         }
11 11
 
12
-        Element oldTail = head.getPrev();
13
-        Element tail = new Element(value, oldTail, head);
14
-        oldTail.setNext(tail);
15
-        head.setPrev(tail);
12
+        Element<T> oldTail = head.prev;
13
+        Element<T> tail = new Element<>(value, oldTail, head);
14
+        oldTail.next = tail;
15
+        head.prev = tail;
16 16
     }
17 17
 
18 18
     public T pop() {
19
-        head = head.getPrev();
19
+        head = head.prev;
20 20
         return shift();
21 21
     }
22 22
 
23 23
     public void unshift(T value) {
24 24
         push(value);
25
-        head = head.getPrev();
25
+        head = head.prev;
26 26
     }
27 27
 
28 28
     public T shift() {
29
-        Object value = head.getValue();
29
+        T value = head.value;
30 30
 
31
-        Element newHead = head.getNext();
32
-        Element newTail = head.getPrev();
31
+        Element<T> newHead = head.next;
32
+        Element<T> newTail = head.prev;
33 33
 
34 34
         if (newHead == head) {
35 35
             head = null;
36 36
         }
37 37
         else {
38
-            newHead.setPrev(newTail);
39
-            newTail.setNext(newHead);
38
+            newHead.prev = newTail;
39
+            newTail.next = newHead;
40 40
             head = newHead;
41 41
         }
42 42
 
43
-        return (T) value;
43
+        return value;
44
+    }
45
+
46
+    private static final class Element<T> {
47
+        private final T value;
48
+        private Element<T> prev;
49
+        private Element<T> next;
50
+
51
+        public Element(T value, Element<T> prev, Element<T> next) {
52
+            this.value = value;
53
+            this.prev = prev;
54
+            this.next = next;
55
+        }
44 56
     }
45 57
 }

+ 0
- 52
linked-list/src/example/java/Element.java ファイルの表示

@@ -1,52 +0,0 @@
1
-public final class Element {
2
-    private final Object value;
3
-    private Element prev;
4
-    private Element next;
5
-
6
-    public Element(Object value, Element prev, Element next) {
7
-        this.value = value;
8
-        this.prev = prev;
9
-        this.next = next;
10
-    }
11
-
12
-    public Element getPrev() {
13
-        return prev;
14
-    }
15
-
16
-    public void setPrev(Element prev) {
17
-        this.prev = prev;
18
-    }
19
-
20
-    public Element getNext() {
21
-        return next;
22
-    }
23
-
24
-    public void setNext(Element next) {
25
-        this.next = next;
26
-    }
27
-
28
-    public Object getValue() {
29
-        return value;
30
-    }
31
-
32
-    @Override
33
-    public boolean equals(Object o) {
34
-        if (this == o) return true;
35
-        if (o == null || getClass() != o.getClass()) return false;
36
-
37
-        Element element = (Element) o;
38
-
39
-        if (value != null ? !value.equals(element.value) : element.value != null) return false;
40
-        if (prev != null ? !prev.equals(element.prev) : element.prev != null) return false;
41
-        return next != null ? next.equals(element.next) : element.next == null;
42
-
43
-    }
44
-
45
-    @Override
46
-    public int hashCode() {
47
-        int result = value != null ? value.hashCode() : 0;
48
-        result = 31 * result + (prev != null ? prev.hashCode() : 0);
49
-        result = 31 * result + (next != null ? next.hashCode() : 0);
50
-        return result;
51
-    }
52
-}

+ 1
- 0
settings.gradle ファイルの表示

@@ -11,6 +11,7 @@ include 'grade-school'
11 11
 include 'hamming'
12 12
 include 'hexadecimal'
13 13
 include 'hello-world'
14
+include 'linked-list'
14 15
 include 'luhn'
15 16
 include 'meetup'
16 17
 include 'nth-prime'