我很难实现我的链表类



我的目标是制作一个链表,其中每个链接都是一个字符。我希望它接受一个字符串作为参数,取第一个字母并将其转换为字符,然后将字符串的其余部分传递到下一个链接,直到存储整个字符串。这就是我目前所拥有的,尽管我不确定其中的哪些部分是正确的或不正确的。我查找了一堆示例,这似乎是默认设置。

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());
  }
}

祝你好运。

相关内容

  • 没有找到相关文章

最新更新