数组实现列表

数组实现列表 先写一个接口,定义了列表的增删查改的方法

public interface MyList { void delete(int index); //根据索引值删除元素 void delete(Object element); //删除某个元素 void add(Object element); //添加一个元素 void update(int index,Object newElement); //修改某一个索引位置的值 boolean contains(Object target); //是否包含目标元素 Object at(int index); //获取目标索引位置的元素 int indexOf(Object element); //获取目标元素的索引}

接口方法实现
使用数组实现List
public class SingleLinkList implements MyList{ private NodeList head; //头节点 private NodeList last; int size; public void delete(int index) { if(index<0||index>=size) return; //处理边界 int i=0; //节点的索引 NodeList p=head; NodeList pre=null; while(p!=null){ if(i==index){ if(p==head){//如果删除的是头节点 head=head.next; //头节点后移 }else { pre.next=p.next; } size--; break; } pre=p; //前驱指针后移 p=p.next; //p指针后移 i++; } } public void delete(Object element) { NodeList p=head; //头本身不能动 NodeList pre=null; //p节点的前一个节点相当于p的前驱因为是单链表要实现删除的话必须要2个指针挨着移动才可以 while(p!=null){ if(p.object.equals(element)){ if(p==head){//如果删除的是头部节点 head=head.next; //将头部节点后移 }else { pre.next=p.next; } size--; break; //删除元素后没必要再继续移动了 } pre=p; //前驱指针后移 p=p.next; //p指针后移 } } public void add(Object element) { if(head==null){//链表为空 head=new NodeList(element); last=head; //头节点尾节点都是这个节点 }else { last.next=new NodeList(element); last=last.next; //尾指针后移 } size++; //链表的大小+1 } public void update(int index, Object newElement) { if(index<0||index>=size) return; //处理边界 int i=0; //节点的索引 NodeList p=head; while(p!=null){ if(i==index){ p.object=newElement; break; } p=p.next; //p指针后移 i++; } } public boolean contains(Object target) { NodeList p=head; while(p!=null){ if(p.object.equals(target)){ return true; } p=p.next; //p指针后移 } return false; } public Object at(int index) { if(index<0||index>=size) return null; //处理边界 int i=0; //节点的索引 NodeList p=head; while(p!=null){ if(i==index){ return p.object; } p=p.next; //p指针后移 i++; } return null; } public int indexOf(Object element) { int i=0; //节点的索引 NodeList p=head; while(p!=null){ if(p.object.equals(element)){ return i; } p=p.next; //p指针后移 i++; } return -1; } @Override public String toString() { NodeList p=head; //不要随便去动原来的饿头节点因此复制一份 StringBuilder sb=new StringBuilder("["); while(p!=null){ sb.append(p.object); p=p.next; if(p!=null){ sb.append(","); } } sb.append("]"); return sb.toString(); } }

【数组实现列表】测试,每一个方法都亲测,完全正确

    推荐阅读