Java单链表实现:(head insert)
/**
* single link, type: head insert
* @param <E>
*/
public class SingleLinkList<E>{
private int size;
private Node first;
private void linkFirst (E e) {
first = new Node(size,e);
size++;
}
/**
* insert element
* @param e
*/
public void insertLinkElement (E e) {
if (isEmpty()) {
linkFirst(e);
} else {
Node temp = new Node(size, e);
temp.next = first;
first = temp;
size ++;
}
}
/**
* remove element first
* @return
*/
public E deleteLinkElement () {
return deleteLinkElement(size - 1); // delete link head
// return deleteLinkElement(0); delete link tail
}
/**
* delete element by index.
* @param index
* @return if contains return e, if not contains return null;
*/
public E deleteLinkElement(int index) {
if (index >= size || index < 0) throw new IndexOutOfBoundsException("this link size is " + size + ", index is " + index);
Node temp = first;
Node prev;
E value = null;
if (first.index == index) {
first = temp.next;
value = temp.getValue();
} else {
prev = first;
temp = first.next;
while (temp!= null) {
if(temp.index == index) {
value = temp.e;
prev.next = temp.next;
}
if (temp.index >= index) prev.index --;
prev = temp;
temp = temp.next;
}
}
size --;
return value;
}
/**
* delete element by element.
* @param e
* @return if contains return e, if not contains return null;
*/
public E deleteLinkElement (E e) {
int index = getIndex(e);
if (index == -1) {
return null;
}
return deleteLinkElement(index);
}
/**
* get first element value
* @return
*/
public E getFirst () {
if (isEmpty()) return null;
return first.getValue();
}
/**
* get element by index
* @param index
* @return
*/
public E get (int index) {
if (index >= size) throw new IndexOutOfBoundsException("this link size is " + size + ", index is " + index);
Node temp = first;
E value = null;
while (temp!= null) {
if(temp.index == index) {
value = temp.e;
break;
}
temp = temp.next;
}
return value;
}
/**
* contains the element
* @param e
* @return false not , true contains
*/
public boolean contains (E e) {
Node temp = first;
while (temp!= null) {
if(temp.getValue() == e) {
return true;
}
temp = temp.next;
}
return false;
}
/**
* get element index
* @param e
* @return
*/
public int getIndex (E e) {
Node temp = first;
while (temp!= null) {
if(temp.getValue() == e) {
return temp.index;
}
temp = temp.next;
}
return -1;
}
public boolean isEmpty () {
return first == null;
}
public int getSize () {
return size;
}
class Node {
int index;
E e;
Node next;
Node(int index, E e) {
this.index = index;
this.e = e;
}
public E getValue () {
return e;
}
}
}