使用节点和 null 查找最小值

Finding minimum value using nodes and null

只是想知道我应该如何解释这段代码?最让我失望的是 minOfTail = next.minVal() 部分,当我们将 thisNumber 与 minOfTail 进行比较时,值到底是多少给那个变量 minOfTail?

    public ListOfNVersion03PartB(int num)
    {
        thisNumber = num;
        next = null;

        ++nodeCount;
        nodeID = nodeCount;

    }
 public int minVal()
    {
        int minOfTail;

        if ( next == null )
            return thisNumber;

        minOfTail = next.minVal();

        if ( thisNumber <= minOfTail )
            return thisNumber; 
        else
            return minOfTail;

    } // method minVal

函数递归计算object链表中thisNumber的最小值。函数 minVal() 计算从当前 object.

开始的列表尾部中的最小值

如果当前 object 的 next 字段是 null 那么尾巴就是 object 并且从当前 [=开始的尾巴的最小值 object 只是 thisNumber.

如果next field is notnull`那么从当前object开始的tail的最小值是

的最小值
  • 当前值的thisNumber值和
  • 从下一个 object 开始的尾部的最小值。

函数首先找到从下一个object开始的尾部的最小值并将该值赋给minOfTail。那么它returns当前object的minOfTailthisNumber的最小值。

was just wondering how I should interpret this code?

这个问题太宽泛,无法回答。

the thing thats throwing me off the most is the minOfTail = next.minVal() part

这个可以回答。

所以,整个minVal()函数可以重写如下:

public int minVal()
{
    if ( next == null )
        return thisNumber;
    return Math.min( thisNumber, next.minVal() );
}

甚至像这样:

public int minVal()
{
    return next == null?  thisNumber : Math.min( thisNumber, next.minVal() );
}

所以,next.minVal()会直接调用next节点计算自己的最小值,下一个节点委托给自己的下一个节点,以此类推,直到没有下一个节点.

另请注意:

    int minOfTail;

    ... unrelated code here...

    minOfTail = next.minVal();

是古老的 C 风格(C 编译器开始受 C++ 影响之前的 C 风格)在 Java 中根本不常见,在任何语言中这样做都是不明智的,而且通常不受欢迎在现代。