用内部类定义链表节点
节点定义如下:
private class Node
{
private T data;
private Node next;
public Node(){}
public Node(T data,Node next)
{
this.data=data;
this.next=next;
}
链表的基本操作:
public class LinkList<T> {
private Node head;
private Node tail;
private int size;
public LinkList()
{
head=null;
tail=null;
}
public LinkList(T elements)
{
head=new Node(elements,null);
tail=head;
size++;
}
public int length()
{
return size;
}
// 1.获取指定索引处的节点
public Node getNodeByIndex(int index)
{
if(index<0||index>size-1)
{
throw new IndexOutOfBoundsException("线性表索引异常");
}
else{
Node current=head;
for(int i=0;i<size-1&¤t!=null;i++,current=current.next)
{
if(i==index)
{
return current;
}
//current=current.next;
}
}
return null;
}
//向指定位置处插入一个元素
public void insert(int index,T element)
{
if(index<0&&index>size-1)
{
throw new IndexOutOfBoundsException("线性表索引越界");
}
if(head==null)
{
add(element);
}
else{
if(index==0)
{
addAtHeader(element);
}
else{
//获取前一个节点
Node prev=getNodeByIndex(index-1);
prev.next=new Node(element,prev.next);
}
}
}
//查找链表中指定元素的位置
public int serchIndex(T element)
{
Node current=head;
for(int i=0;i<size&¤t!=null;i++,current=current.next)
{
if(current.data==element)
{
return i;
}
}
retuurn size;
}
public void add(T element) {
// TODO Auto-generated method stub
if(head==null)
{
head=new Node(element,null);
tail=head;
}
else
{
Node newNode=new Node(element,null);
tail.next=newNode;
tail=newNode;
}
size++;
}
public void addAtHeader(T element) {
// TODO Auto-generated method stub
head=new Node(element,head);
if(tail==null)
{
tail=head;
}
size++;
}
//删除指定索引处的数据元素
public T delete(int index)
{
if(index<0||index>size-1)
{
throw new IndexOutOfBoundsException();
}
//获得index处的节点
Node del=getNodeByIndex(index);
if(index==0)
{
del=head;
head=head.next;
}
else{
Node prev=getNodeByIndex(index-1);
prev.next=del.next;
del.next=null;
}
//获得前一个节
size--;
return del.data;
}
public T remove()
{
return delete(size-1);
}
public boolean empty()
{
return size==0;
}
public void clear()
{
head=null;
tail=null;
size=0;
}
public String toString()
{
StringBuffer sb=new StringBuffer("[");
for(Node current=head;current!=null;current=current.next)
{
sb.append(current.data.toString()+",");
int len=sb.length();
}
int len=sb.length();
return sb.delete(len-1, len).append("]").toString();
}
//测试链表
public class TestLink {
public static void main(String []args)
{
LinkList<String>list=new LinkList<String>();
list.insert(2,"aa");
list.add("ss");
list.add("ff");
list.add("Jaffine");
list.insert(1, "Haha");
System.out.println(list);
//list.delete(1);
System.out.println(list);
System.out.println("ss在链表中的位置:"+list.serchIndex("ss"));
//System.out.println(list.);
list.delete(2);
System.out.println(list);
}
}
转载于:https://my.oschina.net/jaffine/blog/324495