我正在尝试使用链接列表创建一个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;
}
}
}
答案 0 :(得分: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。
答案 1 :(得分:1)
这里可能还有其他问题,但请考虑以下代码块:
else if(s.length() == 1)
{
this.length = 1;
this.firstNode.data = s.charAt(0);
this.firstNode.next = null;
}
请注意,您从未分配this.firstNode
,这意味着您在执行第二行代码时将获得NullPointerException
。尝试在写入节点之前分配节点。
希望这有帮助!