1

この質問では、LList クラスのメソッドを作成する必要があります。リストが既に並べ替えられていると仮定して、正しい位置に新しいノードを追加します。私が扱っているリストはキューです。

ここに私の LNode クラスがあります:

class LNode{
    private int val;
    private LNode next;
    private LNode prev;
    public LNode(int v, LNode n, LNode p){
        next = n;
        prev = p;
        val = v;
    }
    public int getVal(){
        return val;
    }
    public LNode getNext(){
        return next;
    }
    public LNode getPrev(){
        return prev;
    }
    public void setVal(int v){
        val = v;
    }
    public void setNext(LNode n){
        next = n;
    }
    public void setPrev(LNode p){
        prev = p;
    }
}

ここに私の LTest クラスがあります:

public class LTest{
    public static void main(String[]args){
        LList nums = new LList();
        nums.enqueue(55);
        nums.enqueue(20);
        nums.enqueue(13);
        nums.enqueue(11);
        nums.sortedInsert(15);


        nums.display();
    }
}

LList クラスで試したことは次のとおりです。

public void sortedInsert(int v){
    LNode tmp = head;
    while(v<tmp.getVal()){
        tmp = tmp.getNext();
    }
    tmp.setNext(tmp.getPrev().getNext());//tmp's next is now the original LNode
    tmp.getPrev().getNext().setPrev(tmp);//the original LNode's previous is now tmp
    tmp.getPrev().setNext(tmp);//tmp's previous LNode's next is now tmp
    tmp.setVal(v);
}

それは機能しません。出力は 55,20、次に永遠に 15 になり、Java がクラッシュします。tmp LNode がそれ自体を指しているためだと思いますが、私のコードはそれを行っていません。誰が何が悪いのか教えてもらえますか?ありがとうございました。

4

1 に答える 1

2

コードを最初に見たところ、sortedInsert メソッドで新しい値 v の新しいノードを実際に作成していないように見えます。新しいノードを作成し、LinkedList を反復処理してから新しいノードをアタッチする必要があると思います。新しいノードでキャプチャされるため、データの値の設定についてあまり心配する必要はありません。なんか、こういうことも…。

LNode newnode = new LNode();
newnode.setVal(v);

LNode tmp = head;

while(v < head.getVal())
{
   //etc...
}

新しいノードが先頭にある場合は、新しいノードを指すように head 変数を変更する必要があることを忘れないでください。

于 2013-03-07T02:58:01.233 に答える