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

时间:2019-05-01 11:16:39

标签: java linked-list

这是我用来学习Java的书。

LinkedListNode,整数-> LinkedListNode

此函数仅迭代k次链接列表并返回节点。 我的问题如下:将参数从“ head”重命名为“ current”是否有意义?我不能直接工作吗?

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

3 个答案:

答案 0 :(得分:2)

在这种情况下,将head分配给current仅出于可读性目的。

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

另一方面,如果未将head引用传递给该方法(即将从实例变量获取),则需要将其分配给局部变量,以便您的方法是不更改列表的head

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

答案 1 :(得分:0)

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

它的行为将相同。即使直接使用head。

答案 2 :(得分:0)

当然,您可以按如下所示重写它并获得相同的结果:

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
}

如果您使用原始功能尝试相同的测试,则会得到相同的答案。这样写是为了表达自己。