链接-列表将列表中的最后一个对象后移

时间:2019-06-08 15:51:59

标签: java algorithm loops linked-list conditional-statements

我为作业做了一个有关链表的问题。 我有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;
}

此方法应使列表的最后一个对象后退一步。 它是否正确? 谢谢 }

0 个答案:

没有答案