【发布时间】:2019-11-14 00:26:27
【问题描述】:
我一直在做这个练习来练习ListNodes,并且非常沮丧,因为即使我认为我写的代码正确(如下所示),它并没有让我通过。
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;
}
接下来,我尝试创建三个新的ListNodes 等于front。虽然,我不太明白为什么需要这样做。
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。进行此更改后,所有测试均已通过。
我想了解的是
- 为什么我的原始代码(我觉得很好)不起作用。
- 为什么我必须创建多个
ListNode等于front。 - 为什么我必须设置
front = null而不是q = null。
我远不满足。有人可以帮我理解为什么这些更改是必要的吗?
【问题讨论】:
-
前端从何而来?它看起来像一个全局/类变量,我猜将其副本 (p, q...) 更改为 null 确实与更改 front 完全不同!
-
front 是私有 ListNode:practiceit.cs.washington.edu/problem/view/bjp5/chapter16/…
-
"front; // 空列表为 null" 必须得到尊重! (我猜)
-
那为什么当我设置 r.next = null 而不是 front = null 时它会起作用?
-
因为在您的代码的第三种情况下,完整列表不为空,这仅在第二种情况下发生!?如果您只删除了一个元素,但它前面还有其他元素
标签: java list linked-list