我一直在做这个练习来练习ListNode
,并且非常沮丧,因为尽管我认为我写的代码是正确的(如下所示),但它没有让我通过。
public int deleteBack()
{
ListNode p = front;
if(p == null)
{
throw new NoSuchElementException();
}
if(p.next == null)
{
int data = p.data;
p = null;
return data;
}
while(p.next.next != null)
{
p = p.next;
}
int data = p.next.data;
p.next = null;
return data;
}
接下来,我尝试总共创建三个等于 front
的新 ListNode
。虽然,我不太明白为什么这是必要的。
public int deleteBack()
{
ListNode p = front;
if(p == null)
{
throw new NoSuchElementException();
}
ListNode q = front;
if(q.next == null)
{
int data = q.data;
q = null;
return data;
}
ListNode r = front;
while(r.next.next != null)
{
r = r.next;
}
int data = r.next.data;
r.next = null;
return data;
}
不幸的是,这也给了我与以前相同的结果(仅通过了三个测试),直到我将 q = null
更改为 front = null
。进行此更改后,所有测试均通过。
我想要理解的是
- 为什么我的原始代码(对我来说似乎很好)不起作用。
- 为什么我必须创建多个等于
front
的ListNode
。 - 为什么我必须设置
front = null
而不是q = null
。
我还远远没有满意。有人可以帮助我理解为什么需要进行这些更改吗?
最佳答案
https://practiceit.cs.washington.edu/problem/view/bjp5/chapter16/e7-deleteBack
要求 private ListNode 前面;//null 表示空列表
在第一种情况下, front 已经为空(与其副本 p 一样)。
在第二种情况下,您删除列表中最后一个也是唯一一个值,因此 front 必须变为 null,因为列表现在为空。将本地副本 q 设置为 null 并不能解决这个问题。
在第三种情况下,列表中有超过 1 个元素,因此删除最后一个元素后列表不为空,并且 front 必须保持其非空值。
关于java - BJP5练习16.7 : deleteBack — Help me understand the solution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847642/