我的目标是制作一个链表,其中每个链接都是一个字符。我希望它接受一个字符串作为参数,取第一个字母并将其转换为字符,然后将字符串的其余部分传递到下一个链接,直到存储整个字符串。这就是我目前所拥有的,尽管我不确定其中的哪些部分是正确的或不正确的。我查找了一堆示例,这似乎是默认设置。
public class linkedChar{
char data;
linkedChar head;
linkedChar next;
//This is the empty link constructor
public linkedChar(){
next = null;
}
//This is the constructor that takes a string
public linkedChar(String input){
if(input.length() > 0){
data = input.charAt(0);
next = new linkedChar(input.substring(1));
}
}
}
此代码可以编译,但它不适用于我的其他操作方法。例如,我的长度方法。
public int length(){
int length = 0;
linkedChar curr = head;
while(curr != null){
curr = curr.next;
length++;
}
return length;
}
使用时,返回的长度始终为 0。我不确定哪一段代码有错误,我不知道如何解决它。任何帮助都会很棒,谢谢。
在构造函数 head=null 中,然后在长度方法中链接的 Char curr = null;因此,长度永远不会增加并保持为零。因为 while 循环不满足进入条件。
在构造函数中,您永远不会将head
初始化为任何内容,因此在长度方法中,当您设置linkedChar curr = head;
时,您将curr
设置为 null,因此length
永远不会在 while 循环中递增。
您遇到的问题是由于linkedChar head;
因为Java编译器将为您清零值(即将其设置为null
)。因此,您的length()
函数将始终在第一轮停止。
快速解决方法是简单地放弃linkedChar head
字段,并在length()
函数中设置linkedChar curr
next
。这将解决您的问题。
即使您的代码如下所示
class Linked{
char data;
Linked next;
//This is the empty link constructor
public Linked(){
next = null;
}
public int length(){
int length = 0;
Linked curr = next;
while(curr != null){
curr = curr.next;
length++;
}
return length;
}
//This is the constructor that takes a string
public Linked(String input){
if(input.length() > 0){
data = input.charAt(0);
next = new Linked(input.substring(1));
}
}
}
public class LinkedChar {
public static void main(String[] args) {
Linked l = new Linked("abcd");
// Here it will print out 4
System.out.println(l.length());
}
}
祝你好运。