字符串链接列表

时间:2013-10-26 01:02:45

标签: java string linked-list

我正在尝试使用链接列表创建一个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;
        }
    }
}

2 个答案:

答案 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。尝试在写入节点之前分配节点。

希望这有帮助!