我为作业做了一个有关链表的问题。 我有2类链表:
public class listOne
{
private int _num;
private listOne _next,_prev;
public listOne (int n)
{
_num=n;
_next=null;
_prev=null;
}
public listOne (int num,listOne n,listOne p)
{
_num=num;
_next=n;
_prev=p;
}
}
public class listTwo
{
private listOne _head,_tail;
public listTwo ()
{
_head=null;
_tail=null;
}
public listTwo (listOne h,listOne t)
{
_head=h;
_tail=t;
}
}
现在,我需要编写一个布尔方法,如果存在一个平均值等于用户给定平均值的子类,则该方法返回true。如果不是,则返回false,该方法必须具有o(n)的效率,如果可能,则使用o(1)可能更好。 该方法将写在listTwo类中。
我认为首先要计算所有列表的平均值,并对列表中的数字进行计数,然后检查平均值是否等于给定的平均值。 如果列表的平均值大于给定的平均值,我将减去 从总和中减去列表中的最后一个数字,并将列表中的最后一个对象后退一步,并从计数中减去1。 如果列表的平均值小于给定的平均值,我将减去 从第一个对象的总和中向前移动第一个对象,然后从count变量中减去1。
我认为这种方法应该可行,但是当我尝试编写它时,我有点卡住了。 我正在尝试编写一种将最后一个对象后退一步的方法 你能告诉我这个方法写得正确吗? :
private listOne newEnd(listOne list)
{
listOne p=_head,prev=null;
while(p!=null&&p.getNext()!=null)
{
prev=p;
p=p.getNext();
}
if(p!=null&&p.getNext()==null)
{
prev.setNext(p);
}
return p;
}
此方法应使列表的最后一个对象后退一步。 它是否正确? 谢谢 }