我有两个关于链接列表的问题所以我想我会将它们发布在一个问题中。
首先我将从字符串
中显示我的节点类和复制构造函数和构造函数class CharNode
{
private char letter;
private CharNode next;
public CharNode(char ch, CharNode link)
{
letter = ch;
next = link;
}
public void setCharacter(char ch)
{
letter = ch;
}
public char getCharacter()
{
return letter;
}
public void setNext(CharNode next)
{
this.next = next;
}
public CharNode getNext()
{
return next;
}
}
复制构造函数
// copy constructor
public CharList(CharList l)
{
CharNode pt = head;
while(pt.getNext() != null)
{
this.setCharacter() = l.getCharacter();
this.setNext() = l.getNext();
}
}
来自字符串的构造函数
// constructor from a String
public CharList(String s)
{
head = head.setCharacter(s);
}
当我尝试编译时,我的复制构造函数出现错误,它说它无法找到符号this.setCharacter()
...和l.setCharacter()
...
并使用我的构造函数从字符串我知道这是错的。我想过使用charAt()
,但我怎么知道何时停止循环呢?这是一个很好的方法吗?
任何帮助将不胜感激。
答案 0 :(得分:1)
在CharList构造函数中,this
引用CharList
类,它没有setCharacter()
方法(CharNode)。另外,当你在java中调用一个方法时,你需要传递参数,例如setFoo(newFoo)
,而非setFoo() = newFoo
答案 1 :(得分:0)
您的设置字符方法可能在您的节点中,而不在您的列表中。你还需要移动指针。我的意思是,你在哪里“去下一个节点”?
答案 2 :(得分:0)
您的副本构造函数用于类CharList
,而setCharacter
在CharNode
中定义。
this
引用定义构造函数的CharList对象的当前实例。 l
在您的代码中也是CharList
,而不是定义CharNode
的{{1}}。
复制构造函数应该在setCharacter
类中定义。
答案 3 :(得分:0)
在“复制构造函数”中,您需要查看从头开始传递的列表,并为新列表创建新节点...
public CharList(CharList l)
{
// Whatever method your CharList provides to get the
// first node in the list goes here
CharNode pt = l.head();
// create a new head node for *this* list
CharNode newNode = new CharNode();
this.head = newNode;
// Go through old list, copy data, create new nodes
// for this list.
while(pt != null)
{
newNode.setCharacter(pt.getCharacter());
pt = pt.getNext();
if (pt != null)
{
newNode.setNext(new CharNode());
newNode = newNode.getNext();
}
}
}
至于从String
...相同的概念创建列表,除了你遍历字符串而不是另一个CharList
for (int i = 0; i < myString.length(); i++)
{
...
newNode.setCharacter(myString.charAt(i));
...