메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

자바로 만든 환형 링크드 리스트...

2010-01-24

|

by jhw863

2447

^^안녕하십니까 저번에 가르쳐 주신 더블링크드 리스트는 정마 많은 도움이 되었습니다 하지만 이번에는 환형 링크드 리스트를 공부하다가 하나 맞딱뜨린 문제점이 발생 하였습니다 이게 왜 문제인지좀 가르쳐 주십시오..
tail.getNextnode().setPrevnode(newnode);  이게 addNode 메서드에 있는건데 NullPointerException 이 발생합니다 이유만 좀 가르쳐 주십시오,.

class Node{
        private int data;
        private Node prevnode;
        private Node nextnode;
        
        public Node(){
                prevnode = null;
                nextnode = null;
        }
        
        protected int getData() {
                return data;
        }
        protected void setData(int data) {
                this.data = data;
        }
        protected Node getPrevnode() {
                return prevnode;
        }
        protected void setPrevnode(Node prevnode) {
                this.prevnode = prevnode;
        }
        protected Node getNextnode() {
                return nextnode;
        }
        protected void setNextnode(Node nextnode) {
                this.nextnode = nextnode;
        }
        
}

class CDLL{
        
        private static Node node = null;
        private static Node tail = null;
        private int count = 0;
        
        public CDLL(int count){
                this.count = count;
                
                for(int i=0; i                         node = this.Create(i);
                        addNode(node);
                }
        }

        public Node Create(int data){
        
                Node newnode = new Node();
                newnode.setData(data);
                
                newnode.setPrevnode(null);
                newnode.setNextnode(null);
                
                return newnode;
        }
        
        public void addNode(Node newnode){
                if(node == null){
                        node = newnode;
                        node.setNextnode(tail);
                        node.setPrevnode(tail);
                }
                                else{
            
                                                tail = node.getPrevnode();
        
                                                tail.getNextnode().setPrevnode(newnode);  //<--여기서 자꾸 널포인트가 발생합니다...
                                                tail.setNextnode(newnode);
            
                                                newnode.setNextnode(node);  
                                                newnode.setPrevnode(tail);
                                 }

        }
        public void insertNode(Node current, Node newnode){
                newnode.setNextnode(current.getNextnode());
                newnode.setPrevnode(current);
                
                if(current.getNextnode() != null){
                        current.getNextnode().setNextnode(newnode);
                        current.setNextnode(newnode);
                }
        }
        public void remoceNode(Node remove){
                if(node == remove){
                        node.getPrevnode().setNextnode(remove.getNextnode());
                        node.getNextnode().setPrevnode(remove.getPrevnode());
                        
                        node = remove.getNextnode();
                        
                        remove.setPrevnode(null);
                        remove.setNextnode(null);
                }
                else{
                        Node temp = remove;
                        
                        remove.getPrevnode().setNextnode(temp.getNextnode());
                        remove.getNextnode().setPrevnode(temp.getPrevnode());
                        
                        remove.setPrevnode(null);
                        remove.setNextnode(null);
                }
        }
        public Node getnodeAt(int location){
                Node current = node;
                
                while(current != null && (--location) >= 0){
                        current = current.getNextnode();
                }
                
                return current;
        }
        
        public int getnodeCount(){
                
                Node current = node;
                int count = 0;
                
                while(current.getNextnode() != null){
                        current = current.getNextnode();
                        count++;
                }
                
                return count;
        }
        
        public void printNode(){
            if(node.getPrevnode() == null)
            System.out.println("Prev: NULL");
            else
            System.out.println("Prev: "+node.getData());
    
            System.out.println("Current: "+node.getData());
    
            if(node.getNextnode() == null)
            System.out.println("Next: NULL");
            else
            System.out.println("Next: "+node.getNextnode().getData());

        }
}

public class Test {
        
    public static void main(String[] args) {    
            CDLL cd = new CDLL(5);
      
    }
}
댓글 입력