자바 범 형 실현 의 양 방향 링크

데이터 구조 링크 에 대한 상세 한 설명 은 이동 하 십시오.
링크 및 관련 함수 구현
자바 가 실현 하 는 일반 양 방향 링크 는 참고 할 수 있 습 니 다.
자바 가 실현 한 양 방향 링크 링크
일반적인 도입 이 있 으 면 Object 류 가 아래로 전환 할 때 매개 변수 문 제 를 해결 하고 아래로 전환 할 때 ClassCastException 이 코드 를 이상 하 게 보지 않도록 할 수 있 습 니 다.
package test;
/*
 *               
 * */
interface Link {
    //      
    void init();
    //         
    void add(T t);
    //       index    
    boolean remove(int index);
    //                
    boolean contain(T t);
    //           
    int indexOf(T t);
    //            
    boolean set(int index, T t);
    //            
    T get(int index);
    //       
    int length();
    //     
    void clean();
    //               
    T[] toArray();
    //     
    void printLink();
}

class LinkImpl implements Link {

    private Node first;
    private Node last;
    private Integer size;


    //       
    private class Node {
     
        public Node(T data) {
            this.data = data;
        }
        Node next ;
        Node prev ;
        T data;
    }

    @Override
    public void init() {
        // TODO Auto-generated method stub
        this.last = this.first = null;
        this.size = 0;
    }

    @Override
    public void add(T t) {
        // TODO Auto-generated method stub
        //      
        Node newnode = new Node(t);
        //       
        if(this.size == 0) {
            this.first = newnode;
            this.last = newnode;
            newnode.next = null;
            newnode.prev = null;
            this.size++;
        } else {
    //     
            //          
            Node tmp = this.last;

            //   
            tmp.next = newnode;
            newnode.prev = tmp;
            //        
            this.last = newnode;
            newnode.next = null;
            this.size++;
        }
    }


    @Override
    public boolean remove(int index) {
        // TODO Auto-generated method stub
        //     
        if(this.size == 0) {
            return false;
        } else if(index>=this.size || index<0) {
    // index    
            return false;
        } else if(this.last == this.first) {
    //         
            this.first = this.last = null;
            this.size = 0;
        } else if(index == 0) {
    //      
            this.first = this.first.next;
            this.size--;
        } else if(index == this.size-1) {
    //      
            this.last = this.last.prev;
            this.size--;
        } else {
    //     
            //       index    
            Node cur = this.first;
            for( int i = 0; i <= index; i++) {
                cur = cur.next;
            }
            cur.prev.next = cur.next;
            cur.next.prev = cur.prev;
            this.size--;
        }
        return true;
    }

    @Override
    public boolean contain(T t) {
        // TODO Auto-generated method stub
        //     
        Node cur = this.first;
        for( int i = 0; i < this.size; i++) {
            if(cur.data == t) {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

    @Override
    public int indexOf(T t) {
        // TODO Auto-generated method stub
        //     
        Node cur = this.first;
        int i = 0;
        for( ; i < this.size; i++) {
            if(cur.data == t) {
                return i;
            }
            cur = cur.next;
        }
        return -1;
    }

    @Override
    public boolean set(int index, T t) {
        // TODO Auto-generated method stub
        // index     
        if(index >= this.size) {
            return false;
        }
        //     
        Node cur = this.first;
        for(int i = 0; i <= index; i++) {
            cur = cur.next;
        }
        cur.data = t;
        return true;
    }

    @Override
    public T get(int index) {
        // TODO Auto-generated method stub
        // index     
        if(index >= this.size) {
            System.out.println("index     ");
        }
        //     
        Node cur = this.first;
        for(int i = 0; i <= index; i++) {
            cur = cur.next;
        }
        return cur.data;
    }

    @Override
    public int length() {
        // TODO Auto-generated method stub
        return this.size;
    }

    @Override
    public void clean() {
        // TODO Auto-generated method stub
        this.first = this.last = null;
        this.size = 0;
    }

    @Override
    public T[] toArray() {
        // TODO Auto-generated method stub
        Object[] arr = new Object[this.size];
        @SuppressWarnings("unchecked")
        T[] data = (T[])arr;
        Node cur = this.first;
        for(int i = 0; i < this.size; i++) {
            data[i] = cur.data;
            cur = cur.next;
        }
        return data;
    }

    @Override
    public void printLink() {
        // TODO Auto-generated method stub
        Node cur = this.first;
        for(int i = 0; i < this.size; i++) {
            System.out.println(cur.data);
            cur = cur.next;
        }
    }

}



//        
class Factory {
    private Factory() {}
    public static  LinkImpl getInstance() {
        return new LinkImpl();
    }   
}

public class test {
     

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkImpl link = Factory.getInstance();
        link.init();
        //   

    }

}

좋은 웹페이지 즐겨찾기