자바로 만든 환형 링크드 리스트...
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);
}
}