最近写了个链表,你看看吧
public class Node<T> {
private T value;
private Node<T> next;
public Node() {
super();
}
public Node(T value) {
super();
this.value = value;
}
public Node(T value, Node<T> next) {
super();
this.value = value;
this.next = next;
}
public T getValue() {
return value;
}
public Node<T> getNext() {
return next;
}
public void setValue(T value) {
this.value = value;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
public class MyLinkedList<T> implements MyListInterface<T> {
private Node<T> head;
private int size;
private void checkIndex(int index) {
if(index < 0 || index >= size) {
throw new ArrayIndexOutOfBoundsException("下标越界:" + index);
}
}
@Override
public boolean isEmpty() {
return head == null;
}
@Override
public int size() {
//int i = 0;
//Node<T> node = head;
//while (node != null) {
//i++;
//node = node.getNext();
//}
//return i;
return size;
}
@Override
public T get(int index) {
checkIndex(index);
Node<T> node = head;
int i = 0;
while(node.getNext() != null && i < index) {
i++;
node = node.getNext();
}
return node.getValue();
}
@Override
public void set(int index, T element) {
if(index < 0 || index > size) {
throw new ArrayIndexOutOfBoundsException("下标越界:" + index);
}
if(index == size) {
size++;
}
Node<T> node = head;
int i = 0;
while (node.getNext() != null && i < index) {
i++;
node = node.getNext();
}
node.setValue(element);
}
@Override
public boolean add(int index, T element) {
checkIndex(index);
size++;
if(head == null) {
head = new Node<T>(element);
}else{
Node<T> node = head;
if(index == 0) {
head = new Node<T>(element, node);
}else{
int i = 0;
while(node.getNext() != null && i < index - 1) {
i++;
node = node.getNext();
}
node.setNext(new Node<T>(element, node.getNext()));
}
}
return true;
}
@Override
public boolean add(T element) {
return add(Integer.MAX_VALUE, element);
}
@Override
public T remove(int index) {
checkIndex(index);
size--;
Node<T> node = head;
Node<T> reNode = head;
if(index != 0) {
int i = 0;
while(node.getNext() != null && i < index - 1) {
i++;
node = node.getNext();
}
reNode = node.getNext();
node.setNext(node.getNext().getNext());
node.getNext().setNext(null);
}else{
head = node.getNext();
node = null;
}
return reNode.getValue();
}
@Override
public void clear() {
head = null;
size = 0;
}
}