字符串的链接列表



我正在尝试使用链表制作一个类似类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;
        }
    }
}

我看到的一个问题是

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

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

另一个问题:

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

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

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

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

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

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新