BJP5练习16.7:删除返回--帮助我理解解决方案



我一直在做这个练习来练习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;
}

接下来,我尝试总共创建三个等于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。在这次更改之后,所有测试都通过了。

我想了解的是

  • 为什么我的原始代码——对我来说似乎很好——不能工作
  • 为什么我必须创建多个等于frontListNode
  • 为什么我必须设置front = null而不是q = null

我一点也不满意。有人能帮我理解为什么这些改变是必要的吗?

https://practiceit.cs.washington.edu/problem/view/bjp5/chapter16/e7-deleteBack
询问private ListNode front; // null for an empty list

在第一种情况下,front已经为null(就像它的副本p一样(
在第二种情况下,您删除了列表中最后一个也是唯一一个值,因此front必须变为null,因为列表现在为空。将本地副本q设置为null并不能解决这个问题
在第三种情况下,列表中有一个以上的元素,因此删除最后一个元素后,列表不为空,front必须保持其非空值。

相关内容

  • 没有找到相关文章

最新更新