线性表java实现之单链表存储源码
class LinkList<T>{
private class Node{
private T data;
private Node next;
public Node(T data,Node next){
this.data = data;
this.next = next;
}
}
private int length=0; //链表长度
private Node head;
private Node tail;
public LinkList(){
head=null;
tail=null;
}
public LinkList(T data){
head = new Node(data, null);
head = tail;
length++;
}
public int getLength(){
return length;
}
//插入
/**
* @param data
* @param location 从1开始
*/
public void insert(T data,int location){
if(location<0 || location >length)
throw new IndexOutOfBoundsException("越界");
//如果本来为空表
if(head == null){
add(data);
}else{
//非空,但插在第一个位置
if(location == 1){
head = new Node(data,head);
}else{
int flag = 1;
Node temp = head;
//得到所要插入位置的节点前一个节点
while(flag < location-1){
temp = temp.next;
flag++;
}
temp.next = new Node(data, temp.next);
}
}
length++;
}
public void add(T data){
if(head == null){
head = new Node(data, null);
tail = head;
}else{
tail.next = new Node(data,null);
tail = tail.next;
}
length++;
}
//删除
public void delete(int location){
if(location>length || location<0){
throw new IndexOutOfBoundsException("越界");
}
int index=1;
Node prev = head;
//得到前一节点
while(index<location-1){
prev = prev.next;
index++;
}
Node temp = prev.next;
prev.next = prev.next.next;
temp.next = null;//将删除的节点一下链接置空
length--;
}
//查找
public T get(int index){
T data=null;
if(index<=0 || index>length)
throw new IndexOutOfBoundsException("越界");
int flag = 1;
Node temp = head;
while(flag<index){
temp = temp.next;
flag++;
}
data = temp.data;
return data;
}
public boolean isEmpty(){
if(length == 0){
return true;
}else{
return false;
}
}
@Override
public String toString() {
if(length == 0){
return "[]";
}else{
StringBuffer sb = new StringBuffer("[");
Node temp = head;
while(temp!=null){
sb.append(temp.data.toString()+",");
temp = temp.next;
}
return sb.delete(sb.length()-1, sb.length()).toString()+"]";
}
}
}