java 手工实现LinkedList容器
泛型、创建链表、重写打印、返回索引位置的值、返回指定节点、删除节点、指定位置添加节点、判断索引异常
需要两个类,一个表示节点信息和指针,一个表示节点位置并实现链表
第一个不同文件类:
public class node { node next; //指向下一个节点 node pre; //指向上一个节点 Object obs; //节点数据 public node(Object obs) { this.obs=obs; }}
第二个实现类:
package hell;public class test<E> { private node first; //节点首位置 private node last; //节点实时位置 private int size; //记录节点个数public void add(E obs) //添加元素添加链表{ node p=new node(obs); if(first==null) //如果是第一个元素 { first=p; //定位first last=p; //定位实时last } else { last.next=p; //将第二个节点与第一个节点双向链接,并使得第二个节点指向null p.pre=last; p.next=null; last=p; } size++;}public void checkIndex(int index) //判断索引异常{ if(index<0||index>=size) { throw new RuntimeException("索引异常"); }}public E get(int index) //返回索引的值,根据索引大小来判断查找顺序{ checkIndex(index); node p; if(index>=size/2) { p=last; for(int i=size-1;i>index;i--) { p=p.pre; } } else { p=first; for(int i=0;i<index;i++) { p=p.next; } } return (E)p.obs;}public node getNode(int index) //返回指定节点{ checkIndex(index); node p=first; for(int i=0;i<index;i++) { p=p.next; } return p;}public void rem(int index)//删除节点{ checkIndex(index); node p=getNode(index); node up=p.pre; node down=p.next; if(up!=null) //判断up和down是否为空,不能让空指针指向其他,只适合一般节点和尾节点 { up.next=down; //删除尾节点时,使得尾节点的上一个节点指向空,从而删除尾节点 } if(down!=null) { down.pre=up; //删除头节点时,只是让头节点的下一个节点指向上一个节点为空,但头节点 //依旧能指向下一个节点,故无法删除 } if(index==0) //删除头节点 { first=p.next; } if(index==size-1) { last=null; }}public void add(int index,E obs)//指定位置添加节点{ checkIndex(index); node newnode=new node(obs); node p=getNode(index); node up=p.pre; up.next=newnode; newnode.pre=up; newnode.next=p; up=newnode;}public String toString()//重写toString方法{ StringBuilder s=new StringBuilder(); s.append("["); node p=first; while(p!=null) { s.append(p.obs+","); p=p.next; } s.setCharAt(s.length()-1, ']'); return s.toString();}public static void main(String[]args){ test<String> link=new test<>(); link.add("a"); link.add("b"); link.add("c"); System.out.println(link); System.out.println(link.get(2)); node p=link.getNode(2); System.out.println(p.obs); link.rem(0); System.out.println(link); link.add(3,"d"); System.out.println(link);}
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。