为什么这个函数重命名作为参数传递的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节点?的主要内容,如果未能解决你的问题,请参考以下文章