java实现单向链表。
代码如下:
public class SingleLink<E>{
public class Node<E>{
private Node<E> next;
private E data;
public Node(Node<E> next,E data){
this.next = next;
this.data = data;
}
public void setData(E data){this.data = data;}
public void setNext(Node<E> next){this.next = next;}
public E getData(){return data;}
public Node<E> getNext(){return next;}
}
private Node<E> head;
private int size;
public SingleLink(){head = null;size = 0;}
public int size(){return size;}
public boolean isEmpty(){return size == 0;}
public boolean insert(E data,int index){
Node<E> temp = head;
if(index < 0 || index > size){
throw new IndexOutOfBoundsException(index + "index err!");
}else if(index == 0){
if(isEmpty()){
head = new Node<E>(null,data);
size++; return true;
}else{
head = new Node<E>(head,data);
size++; return true;
}
}else if(index == size-1){
for(int i = 0;i < index;i++){
temp = temp.getNext();
}
temp.setNext(new Node<E>(null,data));
size++; return true;
}else{
for(int i = 0;i < index - 1;i++){
temp = temp.getNext();
}
temp.setNext(new Node<E>(temp.getNext(),data));
size++; return true;
}
}
public boolean remove(int index){
Node<E> temp = head;
if(index < 0 || index > size){
throw new IndexOutOfBoundsException(index + "index err");
}else if(index == 0){
head = head.getNext();
size--; return true;
}else if(index == size-1){
for(int i = 0;i < index - 1;i++){
temp = temp.getNext();
}
temp.setNext(null);
size--; return true;
}else{
for(int i = 0;i < index-1;i++){
temp = temp.getNext();
}
temp.setNext(temp.getNext().getNext());
size--; return true;
}
}
public boolean update(E newData,int index){
Node<E> temp = head;
if(index < 0 || index > size){
throw new IndexOutOfBoundsException(index + "index err");
}else if(index == 0){
head.setData(newData);
return true;
}else if(index == size-1){
for(int i = 0;i < index;i++){
temp = temp.getNext();
}
temp.setData(newData);
return true;
}else{
for(int i = 0;i < index;i++){
temp = temp.getNext();
}
temp.setData(newData);
return true;
}
}
public E select(int index){
Node<E> temp = head;
if(index < 0 || index > size){
throw new IndexOutOfBoundsException(index + "index err");
}else if(index == 0){
return head.getData();
}else if(index == size-1){
for(int i = 0;i < index ;i++){
temp = temp.getNext();
}
return temp.getData();
}else{
for(int i = 0;i < index;i++){
temp = temp.getNext();
}
return temp.getData();
}
}
public Object[] toArr(){
Object[] arr = null;
Node<E> temp = head;
if(isEmpty()){
throw new SingleLinkIsEmptyException("single link is empty");
}else{
arr = new Object[size()];
for(int i = 0;i < size;i++){
arr[i] = temp.getData();
temp = temp.getNext();
}
}
return arr;
}
}
class SingleLinkIsEmptyException extends RuntimeException{
public SingleLinkIsEmptyException(){super();}
public SingleLinkIsEmptyException(String s){super(s);}
}