2

いいねリストに要素を追加するのに問題があります

public class LinkedList {
    public Node first;
    public Node last;

    public LinkedList() {
        first = null;
        last = null;
    }

    public void addFirst(Student student) {
        Node f = first;
        Node newNode = new Node(student);
        first = newNode;
        if (f == null) last = newNode;
        else f.previous = newNode;
    }

    public void addLast(Student student) {
        Node l = last;
        Node newNode = new Node(student);
        last = newNode;
        if (l == null) first = newNode;
        else {
            l.next = newNode;
        }
    }


    public void display() {
        Node current = first;
        while (current != null) {
            //print...
            current = current.next;
        }
    }

私の問題は私が走るときです:

list.addLast(1);
list.addFirst(2);
list.display();

「2」だけを表示します。'display'メソッドは、最後に追加された要素を表示できません。
しかし、私が実行した場合:

list.addFirst(2);
list.addLast(1);

両方が表示されます。何が問題なのですか?ありがとう。

4

3 に答える 3

4

このリストが二重にリンクされている場合、その前後にある要素への参照をnewNodeに追加するべきではありませんか?

display()メソッドはトラバースnode.nextしますが、addFirst()設定することはありません.next-したがって、addFirst()何度も呼び出し、そのメソッドのみを呼び出すと、何が出力さdisplay()れますか?

于 2011-10-25T13:50:48.517 に答える
2

addFirstには、を配置する必要がありnewNode.next = fます。現在、双方向の関係の片側を更新しているだけです。また、ディスプレイは次のフィールドを使用しているため、期待どおりに機能しません。

同様に、addLastでは追加する必要がありますがnewNode.previous = l、前のフィールドはdisplayメソッドで使用されていないため、実行時にバグが発生することはありません。

于 2011-10-25T13:53:41.377 に答える
0
public void addFirst(Student student) {
    Node f = first;
    Node newNode = new Node(student);
    newNode.next = f; // this was missing
    first = newNode;
    if (f == null)
        last = newNode;
    else
        f.previous = newNode;
}

public void addLast(Student student) {
    Node l = last;
    Node newNode = new Node(student);
    newNode.previous = l; // this was missing
    last = newNode;
    if (l == null)
        first = newNode;
    else
        l.next = newNode;
}
于 2011-10-25T13:53:17.467 に答える