我正在尝试使用链表制作一个类似类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
。尝试在写入节点之前分配节点。
希望这有帮助!