-2

所以基本上我正在制作一个循环链表,当我尝试打印出我的代码时,Eclipse 的控制台上没有任何内容被打印出来。我希望所有 6 个数字都显示在控制台上。如果可以的话,请帮助我。非常感谢!

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());
    }
}
4

3 回答 3

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

你认为这里会发生什么?(您忘记在开始循环之前将 newTemp 提前一次,或者将其设置为 do...while 循环,而不是 while)

于 2013-06-03T03:16:49.760 回答
0

您需要newTemp在 while 循环中检查 is not null

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}
于 2013-06-03T03:22:31.730 回答
-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;
}
于 2013-06-03T03:21:50.127 回答