2016-10-04 3 views
0

알파벳의 모든 문자에 대해 값을 보유하는 노드를 포함하는 순환 이중 복사 링크 목록을 작성하여 인쇄하려고했습니다.Java의 순환 이중 연결 목록에 노드 추가

public static void main(String[] args) 
{ 
    CDLL<Character> head = null; 
    CDLL<Character> tail = null; 

    CDLL <Character> p = null; 
    for(char c = 'A'; c <= 'Z'; c++) { 
     p = new CDLL<Character>(c, null, null);   
     if (head == null) 
     { 
      p.setNext(p); 
      p.setPrevious(p); 
      head = p; 
      tail = head; 
     } 
     else 
     { 
      p.setPrevious(tail); 
      tail.setNext(p); 
      head.setPrevious(p); 
      p.setNext(head); 
      head = p;  
     } 
    } 

    print(p); 
} 

public static void print(CDLL<Character> list) { 
    String str = ""; 
    while(list != null) { 
     str += list.getPrevious().getValue() + " ";   
     list = list.getPrevious(); 
    } 
    System.out.print(str); 
} 

이 문제

CircularDoublyList.java : 여기

지금까지 내 코드입니다 나는 목록을 인쇄 시도했지만, 아무것도 표시 것 같다 및 오류들은 없다 메시지를 콘솔에 표시합니다. 어떤 도움을 주시면 감사하겠습니다.

+0

당신은 당신의 문제를 보여주고 있다는 [mcve] 제공해야한다. 이 코드는 불완전하고 너무 길다. –

+0

이 문제는 디버거로 먼저 실행 한 다음 문제가 계속되는 경우에만 여기로 연결하여 해결할 수 있습니다. ** 디버거에서 표시되는 내용 **이 표시됩니다. –

답변

2

음, 목록이 원형이기 때문에, 코드 :

while(list != null) { 
    str += list.getPrevious().getValue() + " ";   
    list = list.getPrevious(); 
} 

가 빙빙 돌고 계속 중지하지 않습니다.

그냥 다시 첫 번째 노드를 발견하면 중지 당신의 방법을 변경 :

public static void print(CDLL<Character> list) { 
    String str = ""; 
    CDLL<Character> first = null; 
    while (true) { 
    str += list.getPrevious().getValue() + " "; 
    if (first == null) 
     first = list.getPrevious(); 
    else if (first == list.getPrevious()) 
     break; 
    list = list.getPrevious(); 
    } 
    System.out.print(str); 
} 
+0

긴 밤이었습니다 ... 고마워요. – NotToBrag