美文网首页
用链表来实现List

用链表来实现List

作者: VikingOldYoung | 来源:发表于2016-10-27 10:12 被阅读0次
  • 结点类
public class Node {
    Node previous;
    Object obj;
    Node next;
    
    public Node(){
    }

    public Node(Node previous, Object obj, Node next) {
        this.previous = previous;
        this.obj = obj;
        this.next =next;
    }
}
  • 实现程序
public class MyArraylistBylink {
    Node first;      //首结点
    Node last;      //尾结点
    int size;
    
    public MyArraylistBylink(){
        
    }
    
    public int size(){
        return size;
    }
    
    public void add(Object obj){
        Node temp=new Node();
        temp.obj=obj;
        if(first==null){     //如果为空的话,首尾都是他
            first=temp;
            last=temp;
        }else{
            last.next=temp;    //不为空,把尾连上他,再把尾设置为他就好了
            temp.previous=last;
            last=temp;
        }
        size++;
    }
    
    public void add(Object obj,int index){
        Node temp=node(index);
        Node up=temp.previous;
        Node newnode=new Node();
        up.next=newnode;
        newnode.obj=obj;
        newnode.next=temp;
        temp.previous=newnode;
    }
    
    private Node node(int index){
        checkRang(index);
        Node temp=first;    //不能直接对首结点操作,会丢失这个链表的
        for(int i=0;i<index;i++){  //需要遍历才能找到索引位置的内容
            temp=temp.next;
        }
        return temp;
    }
    
    public Object get(int index){
        Node temp=node(index);
        return temp.obj;
    }
    
    public Object remove(int index){
        Node temp=node(index);
        Object oldValue=temp.obj;
        
        Node up=temp.previous;
        Node down=temp.next;
        up.next=down;
        down.previous=up;
        temp=null;
        
        return oldValue;
    }
    
    public void checkRang(int index){
        if(index>=size||index<0){
            try {
                throw new Exception("Out of Bounds!");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
        MyArraylistBylink list=new MyArraylistBylink();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        
        list.add("6", 2);
        System.out.println(list.get(3));
    }
}

相关文章

网友评论

      本文标题:用链表来实现List

      本文链接:https://www.haomeiwen.com/subject/mxijuttx.html