为什么这个函数重命名作为参数传递的LinkedList节点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个函数重命名作为参数传递的LinkedList节点?相关的知识,希望对你有一定的参考价值。

这是我用来学习java的书。

LinkedListNode,integer - > LinkedListNode

该函数简单地遍历链表k次并返回节点。我的问题如下:将参数从“head”重命名为“current”是否有意义?我不能直接在头上工作吗?

LinkedListNode getKthNode(LinkedListNode head, int k) {
    LinkedListNode current = head;
    while (k > 0 && current != null) {
        current = current.next;
        k--;
    }
    return current;
}
答案

在这种情况下,将head分配给current只是为了便于阅读。

如果直接修改head局部变量而不是使用current局部变量,则该方法的行为将完全相同。

另一方面,如果head引用未传递给方法(即它将从实例变量获得),则需要将其分配给局部变量,以便您的方法不会更改head的清单。

在这种情况下,LinkedListNode getKthNode(int k)将是具有LinkedList实例变量的LinkedListNode head类的方法。

另一答案

当然,你可以按如下方式重写它,并期望得到相同的结果:

LinkedListNode getKthNode(LinkedListNode head, int k) {
    while (k > 0 && head != null) {
        head = head.next;
        k--;
    }
    return head;
}

这是我运行的一些测试的示例:

首先创建一个LinkedListNode类:

private static class LinkedListNode {
    public LinkedListNode next;
    private int value;

    public LinkedListNode(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

然后我创建了3个LinkedListNode对象,给它们值100,200,300。

public static void main(String[] args) {
    LinkedListNode first = new LinkedListNode(100);
    LinkedListNode second = new LinkedListNode(200);
    LinkedListNode third = new LinkedListNode(300);
    first.next = second;
    second.next = third;
    third.next = null;


    System.out.println(getKthNode(first, 1).getValue()); // 200
}

如果您使用原始功能尝试相同的测试,您将得到相同的答案。它写得像是为了表达。

另一答案

是的,如果您不想修改方法内的头部。您可以使用相同的方法。

它会表现得一样。即使你直接使用头部。

以上是关于为什么这个函数重命名作为参数传递的LinkedList节点?的主要内容,如果未能解决你的问题,请参考以下文章

仅将一些参数作为 R 中的命名列表传递给函数

通过函数传递未命名的类

为啥参数的顺序保持不变,即使参数作为命名参数传递?在 JavaScript 中

js 函数参数传递引用类型与基本类型

将数组作为url参数传递并重定向到新页面

如何将 Future 作为函数参数传递?