单链表

用内部类定义链表节点
节点定义如下:
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&&current!=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&&current!=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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值