当前位置: 首页 > 知识库问答 >
问题:

如何通过递归在列表的最后添加项目?

刘升
2023-03-14
public class SLList {

    public class IntNode {
        public int item;
        public IntNode next;
        public IntNode(int i, IntNode n){
            item = i;
            next = n;
        }
    }

    public IntNode first;

    public SLList(int x){
        first = new IntNode(x,null);
    }

    public void addFirst(int x){
        first = new IntNode(x, first);
    }

    public int getfirst(){
        return first.item;
    }
    
    public void addLast(int x) {
    
    }
    
    public static void  main(String[] args){
        SLList L =  new SLList(10);
        L.addFirst(5);
        L.addFirst(8);
        L.addLast(9);
        System.out.println(L.getfirst());
    }
}

如何使用递归在列表的最后添加一个项目?我想通过递归添加列表的最后一个,但不能这样做,因为我通过指针指向最后一个元素,所以它返回添加的元素和最后一个元素,而不是整个列表。

共有1个答案

邬宜然
2023-03-14

设计递归方法时,需要实现两个部分:

  • 表示输入的基本情况,很明显预期的输出将是。在您的例子中,最后一个节点是不指向任何其他节点的节点,即其next字段是null。此外,作为预防措施,我们需要在访问其next字段之前解决给定节点为null的情况
  • 递归案例——是递归调用发生且方法的主要逻辑驻留的一部分。对于这个任务,递归的情况相当简单:如果当前节点不是null,并且它指向非null节点,那么应该返回下一个节点

为了添加新的最后一个节点,我们首先需要找到对现有节点的引用。

这就是产生最后一个节点的递归方法的样子:

    public IntNode getLast(IntNode curNode) {
        if (curNode == null) {
            return null;
        }
        if (curNode.next == null) {
            return curNode;
        }

        return curNode.next;
    }

注意,getLast()可以返回一个null。这意味着字段firstnull,我们可以将作业委托给方法addFirst()。否则,将创建该节点的新实例并将其分配给last。下一步

    public void addLast(int x) {
        IntNode last = getLast(first);
        if (last == null) {
            addFirst(x);
        } else {
            last.next = new IntNode(x, null);
        }
    }
 类似资料:
  • 一切似乎都很好,但是这一行有一个错误: 错误是:构造函数ArrayList(Arrays.asList(i), ArrayList)未定义 我知道错误是说数组的asList方法不接受ArrayList,但是我如何在列表中添加因式分解返回的项呢?这种递归真的把我搞糊涂了

  • 我的目标是从用户输入的“AM”-“PM”字符串格式打印包含24小时十进制格式的进入和退出时间的列表,如以下字符串数组:{6AM#8AM,11AM#1PM,7AM#8PM,7AM#8AM,10AM#12PM,12PM#4PM,1PM#4PM,8AM#9AM} 我在for循环中声明了各个列表,并在循环中为它们赋值,但从代码中得到了以下运行时异常:java。lang.IndexOutOfBoundsEx

  • 我有一个for循环,它遍历CSV中的每一行,我创建了一个包含列表的字典,但是列表被重写了,因为字典键被重复了几次。我如何总结或追加到列表中的第二(1)位置相同的键的下一个值下一个循环迭代? 因为使用append时,如果再次找到现有键,则会覆盖该值,因此该键的值会被一次又一次地覆盖。 CSV中的字段包括: 输出应该是这样的:

  • 问题内容: 我正在使用列表视图,并且有很多列表项。我需要为所有列表项添加一个微调框。我正在使用customadapter,我的问题是要添加图像,我们可以使用imageview。对于微调器,我可以使用什么? 问题答案: 这是代码。

  • 我一直在使用一个非常简单的Get ChildItem-Recurse命令生成一个文件目录的CSV清单,用于评估所述文件的保留/删除。我是PowerShell的新手,我正在努力使代码尽可能简单,以下是我成功使用的内容: 但是我想向选择对象添加一个校验和,我尝试了以下代码,但它创建了一个只有校验和而没有其他文件数据的CSV。校验和应该是CSV中其他选择对象参数旁边的一列。 非常感谢任何帮助,我是Pow

  • 我正在尝试使用递归函数打印列表,该列表具有由我的以下代码产生的列表的最大长度: 我需要将下面的输出传递给找到最大长度的递归函数: 基于我对这个问题答案的理解,我尝试使用以下代码来实现它,但我无法很好地实现递归部分。以下是我的尝试: 注:我需要使用递归来解决最长递增序列的问题。