0

我正在尝试StringBuilder使用链表创建一个类似的类,我想我在构造函数的某个地方搞砸了。任何人都可以在这里找到问题吗?我相信问题在于我如何移动到下一个节点。

节点类:

private class CNode
{
    private char data;
    private CNode next;

    private CNode(char c)
    {
        data = c;
        next = null;
    }

    private CNode(char c, CNode nextNode)
    {
        data = c;
        next = nextNode;
    }
}

构造函数:

private CNode firstNode;
private int length;

public MyString(String s)
{
    if(s == null)
    {
        this.length = 0;
        this.firstNode = null;
    }
    else if(s.length() == 1)
    {
        this.length = 1;
        this.firstNode.data = s.charAt(0);
        this.firstNode.next = null;
    }
    else
    {
        this.length = s.length();
        CNode node = null;
        CNode nextNode = null;

        this.firstNode = new CNode(s.charAt(0), node);

        for(int i = 1; i < s.length(); i++)
        {
            node = new CNode(s.charAt(i), nextNode);
            node = node.next;
        }
    }
}
4

2 回答 2

2

我看到的一个问题是

this.firstNode = new CNode(s.charAt(0), node);

当该行执行时,node为空,所以你firstNode最终什么都没有链接。此外,在您尝试构建链接的 for 循环中,您永远不会分配nextNode,但您尝试使用它将一个节点链接到下一个节点。因此,所有节点最终都链接到null的初始值nextNode

另一个问题:

this.firstNode.data = s.charAt(0);
this.firstNode.next = null;

那应该是创建一个新的 CNode,因为this.firstNode当该代码执行时仍然为 null,这将导致 NullPointerException。

于 2013-10-26T01:08:00.197 回答
1

这里可能还有其他问题,但请考虑以下代码块:

else if(s.length() == 1)
{
    this.length = 1;
    this.firstNode.data = s.charAt(0);
    this.firstNode.next = null;
}

请注意,您从未分配过this.firstNode,这意味着您将NullPointerException在执行第二行代码时得到 a 。在写入之前尝试分配一个节点。

希望这可以帮助!

于 2013-10-26T01:07:49.717 回答