如何用while循环重新编写这个java方法?
它应该从伪LinkedList中取出最后一个元素。说明建议使用while循环查找下一个到最后一个元素如何用while循环重新编写这个java方法?,java,loops,while-loop,Java,Loops,While Loop,它应该从伪LinkedList中取出最后一个元素。说明建议使用while循环查找下一个到最后一个元素 public String removeFromEnd() { String removed = null; if (head == null) { return removed; } else if (head.getNext() == null) { removed = head.getName(); head = nu
public String removeFromEnd() {
String removed = null;
if (head == null) {
return removed;
} else if (head.getNext() == null) {
removed = head.getName();
head = null;
} else if (head.getNext().getNext() == null) {
removed = head.getNext().getName();
head.setNext(null);
}
return removed;
}
过去的尝试通常与此类似:
public String removeFromEnd() {
String removed = null;
while (head.getNext().getNext() == null){
removed = head.getNext().getName();
head.setNext(null);
}
if (head.getNext() == null){
removed = head.getName();
head = null;
}
return removed;
}
在您的尝试代码中
while (head.getNext().getNext() == null){
removed = head.getNext().getName();
head.setNext(null);
}
只有当
head
已经是倒数第二个元素时,才能进入此循环。您希望循环,直到head
是倒数第二个元素。这有帮助吗?在您的尝试代码中
while (head.getNext().getNext() == null){
removed = head.getNext().getName();
head.setNext(null);
}
Node node = head;
Node prev = null;
while (node != null && node.getNext() != null) {
prev = node;
node = node.getNext();
}
只有当
head
已经是倒数第二个元素时,才能进入此循环。您希望循环,直到head
是倒数第二个元素。这有帮助吗?有很多不同的东西。我似乎总是得到空指针异常或返回错误的值。我的方法通常有这样一个while循环:while(head.getNext().getNext()==null){…}但我似乎总是忽略至少一个案例。请将您尝试的解决方案放在问题中,而不是注释中。任何人都不能将多行代码作为注释来读取。@LouisWasserman:Chuck Norris可以将多行代码作为注释来读取。获取对第一个元素的引用,检查下一个元素是否为null,如果不为空,则设置对下一个元素的引用,并在while循环中执行此操作。。。不要使用getNext()。我似乎总是得到空指针异常或返回错误的值。我的方法通常有这样一个while循环:while(head.getNext().getNext()==null){…}但我似乎总是忽略至少一个案例。请将您尝试的解决方案放在问题中,而不是注释中。任何人都不能将多行代码作为注释来读取。@LouisWasserman:Chuck Norris可以将多行代码作为注释来读取。获取对第一个元素的引用,检查下一个元素是否为null,如果不为空,则设置对下一个元素的引用,并在while循环中执行此操作。。。不要使用GETNEXT().GETNEXT()构造,因为您甚至没有检查GETNEXT()是否使其更可读,您可能会考虑移除其他,因为如果头= = null感谢提姆,代码将返回。这应该是解决这个问题的最好办法。如果我的数学是正确的,这应该需要O(n)个时间来完成,其他的事情几乎都是持续的工作。哦,removeNode的调用是什么?该方法不存在(没有它也可以工作)。当我尝试设置下一个(null)时,这会给我一个null指针异常。为什么是的,我们不知道您的节点是什么数据结构,但这是如何从列表中实际删除最后一个元素的一个很好的猜测。如果您提供如何从列表中实际删除该项的信息,我们可以提供一个工作示例。但是现在你应该能够自己做了。为了使它更可读,你可以考虑移除其他,因为如果头= = null感谢提姆,代码会返回。这应该是解决这个问题的最好办法。如果我的数学是正确的,这应该需要O(n)个时间来完成,其他的事情几乎都是持续的工作。哦,removeNode的调用是什么?该方法不存在(没有它也可以工作)。当我尝试设置下一个(null)时,这会给我一个null指针异常。为什么是的,我们不知道您的节点是什么数据结构,但这是如何从列表中实际删除最后一个元素的一个很好的猜测。如果您提供如何从列表中实际删除该项的信息,我们可以提供一个工作示例。但是你现在应该可以自己做了。我想我一直在尝试使用while循环作为条件而不是实际的循环。谢谢,有点。我想我一直在尝试使用while循环作为条件而不是实际的循环。谢谢。尝试插入它,当它应该返回名称时返回null。所以我不确定它是不完整还是什么。是的,这只是一个循环,迭代到列表的末尾,现在想想缺少什么,基本上你已经在自己的示例中完成了缺少的工作…尝试插入它,当它应该返回名称时返回null。所以我不确定它是不完整还是什么。是的,这只是一个循环,循环到列表的末尾,现在想想缺少了什么,你基本上已经在自己的示例中完成了缺少的工作。。。
Node node = head;
Node prev = null;
while (node != null && node.getNext() != null) {
prev = node;
node = node.getNext();
}