Link単端リンク表
1810 ワード
Linkは以下のAPIを提供します
addFirst,removeFirst
get Length
has Next
next
リセット
insertAfter
removeAfter
indexOf
Nodeは補助構造であり、簡便のために標準set、get方法は使用されず、記憶されている内容は非負の整数であると仮定する.
この構造は一方向単一端チェーンテーブルの構造を最も簡略化し、このデータ構造に対してのみ実現できる非常に便利な方法を提供する.insertAfterのみ提供されていますが、insertBeforeは提供されていません.
addFirst,removeFirst
get Length
has Next
next
リセット
insertAfter
removeAfter
indexOf
Nodeは補助構造であり、簡便のために標準set、get方法は使用されず、記憶されている内容は非負の整数であると仮定する.
この構造は一方向単一端チェーンテーブルの構造を最も簡略化し、このデータ構造に対してのみ実現できる非常に便利な方法を提供する.insertAfterのみ提供されていますが、insertBeforeは提供されていません.
class Node {
private int value;
private Node next;
Node(int value) {
this.value = value;
}
int value() {
return value;
}
void next(Node next) {
this.next = next;
}
Node next() {
return next;
}
}
class Link {
private Node first;
private int length;
private Node current;
void addFirst(int value) {
Node node = new Node(value);
node.next(first);
first = node;
length++;
}
int removeFirst() {
if(first == null) return -1;
int result = first.value();
first = first.next();
length--;
return result;
}
int getLength() {
return length;
}
boolean hasNext() {
return current == null? first != null : current.next() != null;
}
int next() {
current = (current == null? first : current.next());
return current.value();
}
void reset() {
current = null;
}
void insertAfter(int value) {
if(current == null) addFirst(value);
else {
Node node = new Node(value);
node.next(current.next());
current.next(node);
length++;
}
}
int removeAfter() {
if(current == null) return removeFirst();
if(current.next() == null) return -1;
int result = current.next().value();
current.next(current.next().next());
return result;
}
int indexOf(int value) {
int i = 0;
Node temp = first;
while(temp != null) {
if(temp.value() == value) return i;
temp = temp.next();
i++;
}
return -1;
}
}