diff src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/data/list/headNode.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/data/list/headNode.java	Wed Nov 30 01:47:55 2016 +0900
@@ -0,0 +1,63 @@
+package jp.ac.u_ryukyu.ie.cr.jungle.data.list;
+
+public class headNode<T> implements Node<T> {
+    private final Node<T> next;
+
+
+    public headNode() {
+        this.next = new TailNode<>();
+    }
+
+    public headNode(Node<T> next) {
+        this.next = next;
+    }
+
+    public Node<T> getNext() {
+        return next;
+    }
+
+    public T getAttribute() {
+        return null;
+    }
+
+    public Node<T> add(int currentNum, int num, T attribute) {
+        if (num == 0) {
+            Node<T> newNode = new DefaultNode<>(attribute, next);
+            return new headNode<>(newNode);
+        }
+        Node<T> newNode = next.add(currentNum + 1, num, attribute);
+        if (newNode == null)
+            return this;
+        return new headNode<>(newNode);
+    }
+
+    public Node<T> addLast(T attribute) {
+        Node<T> node = next.addLast(attribute);
+        return new headNode<>(node);
+    }
+
+    public Node<T> delete(int currentNum, int deleteNum) {
+        if (currentNum == deleteNum) {
+            return new headNode<>(this.next.getNext());
+        }
+
+        Node<T> newNode = next.delete(currentNum + 1, deleteNum);
+        if (newNode == null)
+            return this;
+        return new headNode<>(newNode);
+    }
+
+    @Override
+    public Node<T> replaceNode(int currentNum, int num, T attribute) {
+        Node<T> nextNode = getNext();
+        Node<T> newNode = nextNode.replaceNode(currentNum, num, attribute);
+        if (newNode == null)
+            return this;
+        return new headNode<>(newNode);
+    }
+
+    @Override
+    public int length() {
+        return next.length();
+    }
+}