2013-06-03 4 views
-2

기본적으로 순환 링크 된 목록을 만들고 있습니다. 코드를 인쇄하려고 할 때 Eclipse의 콘솔에 아무 것도 인쇄되지 않습니다. 내가 바라는 바는 모든 6 개의 숫자가 콘솔에 나타난다는 것이다. 가능하면 도와주세요. 정말 고마워!연결된 목록이 Java로 인쇄되지 않습니다.

public class CircularLinkedList 
{ 
    public Node head; 
    public Node tail; 

    public CircularLinkedList() 
    { 
     head =null; 
     tail =null; 
    } 

    public void insert(int v) 
    { 
     if(head == null) 
     { 
      head = new Node(v, null); 
      tail = head;  
     } 
     else 
     { 
      Node newNode = new Node(v,head); 
      tail.setNextNode(newNode); 
      tail = newNode; 
     } 
    } 

    public String toString() 
    { 
     if(head == null) 
     { 
      System.out.println("The list is empty"); 
     } 
     Node newTemp = head; 
     String result = ""; 
     while(newTemp != head) 
     { 
      result += newTemp.toString(); 
      newTemp = newTemp.getNextNode(); 
     } 
     return result; 
    } 

    public static void main(String[] args) 
    { 
     CircularLinkedList a = new CircularLinkedList(); 

     a.insert(1); 
     a.insert(2); 
     a.insert(3); 
     a.insert(4); 
     a.insert(5); 
     a.insert(6); 
     System.out.println(a.toString()); 
    } 
} 
+2

'노드 newTemp = 머리에 null가 아닌; '그리고 그 직후,'' while (newTemp! = head)'조건이 false이므로 실행되지 않습니다. – Vulcan

+0

@MouseEvent 재귀 적으로 어떻게됩니까? – Patashu

+0

@Siddharth 왜 괄호를 이집트 스타일로 바꾸십니까? 나는 그것이 OP가 원한 것이 아니라고 생각한다 (원래 코드는 보통 괄호를 가지고있다). 코드의 원래 스타일을 변경하지 않는 방식으로 만 서식을 수정해야합니다. –

답변

0

당신은 newTemp을 점검 할 필요가 while 루프

public String toString() { 
    if (head == null) { 
     return ""; 
    } 

    String result = ""; 

    Node temp = head; 

    do { 
     result += temp.toString(); 

     temp = temp.getNextNode(); 

    } while (head != tail && temp != head); 
    return result; 
} 

테스트

CircularLinkedList a = new CircularLinkedList(); 
System.out.println(a.toString()); 
a.insert(1); 
a.insert(2); 
a.insert(3); 
System.out.println(a.toString()); 
a.insert(4); 
a.insert(5); 
a.insert(6); 
System.out.println(a.toString()); 

결과 당신은 정의

<empty string> 
{ "value": 1}{ "value": 2}{ "value": 3} 
{ "value": 1}{ "value": 2}{ "value": 3}{ "value": 4}{ "value": 5}{ "value": 6} 
+0

'tail'의 다음 노드는'head'이고, 그 반대의 경우는'next'가 항상 null이 아니므로 while 루프가 무한대로 실행됩니다. 이것이 순환 또는 이중 연결 목록의 기본 개념입니다. – Vulcan

+0

@ Vulcan 미안 순환 참조 부분을 잊어 버렸습니다. –

+0

이것은 매우 감사했습니다. – Amloelxer

3
Node newTemp = head; 
while(newTemp != head) 

여기에 무슨 일이 일어날 지 생각하십니까? (루프를 시작하기 전에 한 번 newTemp을 넘기는 것을 잊었거나 while 대신 while ... while 루프를 만듭니다)

+0

정말 감사드립니다. 미안하지만 나는 초보자이다. 또 다른 질문은 왜 System.out.println (a)이 아닌지? 내 목록을 인쇄하는 작업은? – Amloelxer

+0

@Amloelxer 오류 메시지가 무엇입니까? – Patashu

+0

오류가 없습니다. 나는 toString 메소드를 사용하지 않는다면 궁금 할 것이다. 왜 System.out.println (a)이 모든 숫자를 출력하지 않는지. – Amloelxer

-1

while 루프가 절대 입력되지 않도록 다음 노드로 진행하지 않습니다. 또한 newTemp != head 행이 제대로 작동하지 않을 수 있습니다. Node 클래스에 몇 가지 추가 정보를 저장하고이 단계가 제대로 작동하도록 .equals() 메서드를 재정의 할 수 있습니다.

public String toString() 
{ 
    if(head == null) 
    { 
     System.out.println("The list is empty"); 
    } 
    Node newTemp = head; 
    String result = newTemp.toString(); //Advance to the next node. 
    newTemp = newTemp.getNextNode(); 
    while(newTemp != head) //The root cause of your problem. 
    { 
     result += newTemp.toString(); 
     newTemp = newTemp.getNextNode(); 
    } 
    return result; 
} 
+1

downvote 이유는 무엇입니까? o_O – Sanchit

관련 문제