【问题标题】:Recursively Add Node to Linked List at Specific Index递归地将节点添加到特定索引处的链表
【发布时间】:2015-04-09 09:10:57
【问题描述】:

我正在编写一个递归函数,它将通过递归迭代到索引然后添加项目来将项目添加到给定索引的列表中。该函数应接受 2 个参数(字符串值和整数索引)并检查索引是否有效。这是我目前所拥有的,它不检查有效性,只在传入一个字符串值时才有效。

测试台(主)

public class TestBench {

public static void main(String[] args) {
    RecLinkedList list = new RecLinkedList();
    list.add("A");
    list.add("B");
    list.add("D");
    list.add("C", 2);
    list.add("E", 4);
    list.add("G", 6); //this should be invalid

    System.out.println( list );
    System.out.println( list.remove( 1 ).getValue() );
    System.out.println( list.remove("D").getValue() );
    System.out.println( list.remove("G").getValue() );
    System.out.println( list.size() );
    System.out.println( list );
}

链表类

public class RecLinkedList {
private Node first;

public RecLinkedList(){
    first = null;
}
public boolean isEmpty() {
    return first == null;
}
public void add( String s){
    first = add( s, first);
}
private Node add( String s, Node list){
    if( list == null ){
        return new Node(s);
    }else{
        list.setNext( add( s, list.getNext() ) );
    return list;
    }
}
public String toString() {
    return helperString(first);
}
private String helperString(Node list) {
    if (list.getNext() != null) {
        return list.getValue() + "," + helperString(list.getNext());
    }
    else {
        return (String) list.getValue();   
    }
} 

我需要帮助的是我是否需要创建另一个同时接受参数(字符串和 int 值)的 add 函数,或者我是否可以修改我所拥有的?另外,至于检查索引是否有效,我不确定如何检查。

【问题讨论】:

    标签: java recursion linked-list nodes


    【解决方案1】:

    最好用参数Stringint 编写另一个add 方法,因为与其他add 函数相比,它的行为不同。如果您查看许多类的 Java API,就会发现方法名称是重载的。所以这是一个很好的做法。

    要确定索引是否有效,您首先需要声明一个包含当前链表大小的字段。每次添加或删除元素时,都会更新此计数器。当您调用新的 add 方法时,您将首先检查要插入新元素的索引是低于零还是大于链表的大小。如果它低于零,那么这不是一个有效的索引。如果它大于列表的大小,那么这没有意义,因此您可以拒绝它或更可疑地将元素添加到列表的末尾。

    【讨论】:

      【解决方案2】:

      关于有效索引,您可以添加一个 size 字段来计算现有节点。

      public class RecLinkedList {
          private int size = 0;
      
          //...
          private Node add( String s, Node list){
              if( list == null ){
                  this.size += 1;
                  return new Node(s);
              }else{
                  list.setNext( add( s, list.getNext() ) );
                  return list;
              }
          }
          //...
      }
      

      然后在使用 public void add(String value, int index) 方法添加新节点时,您可以检查索引是大于当前大小还是小于零。

      要在正确的位置添加节点,只需计算您已经访问过的节点数量,然后在到达正确位置时添加节点。

      【讨论】:

      • 好的,我创建了新的 add 方法 public void add(String value, int index) 并且我使用了 if 语句 if(index size) 这个 if 语句里面会出现什么以及什么将是其他。
      • 您可以抛出一个异常,指示索引超出范围。在 else 语句中,您必须将字符串添加到列表中:)
      猜你喜欢
      • 2013-06-20
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多