-2

私はリンクリストを含む宿題に取り組んでいます。キューADTを実装する必要がありますが、私が問題を抱えている1つの方法は、リストの最後にノードを追加することです(enqueueメソッド)。これが私のコードです:

パブリッククラスQueueはQueueInterfaceを実装します{

    private Node head;
    private Node tail;
    private int sz;

    public  Queue() {
        head = null;
        tail = null;
        sz = 0;
    }

    public void enqueue(T newEntry) {
        Node newElement = new Node(newEntry);
        newElement.next = null;
        tail.next = newElement;
        tail = newElement;
    }

    public T dequeue() {
        T result = null;
        if(head != null) {
            result = head.data;
            head = head.next;
            sz--;
        }
        return result;
    }

    public T getFront() {
        return head.data;
    }

    public boolean isEmpty() {
        if (head == null) {
            return true;
        }
        return false;
    }

    public void clear() {
        while (!isEmpty()) {
            dequeue();
        }
    }

    @Override
    public String toString() {
        return "Queue [head=" + head + ", sz=" + sz + "]";
    }

    public class Node {

        private Node next;
        private T data;

        public Node (T newData) {
            data = newData;
        }

        @Override
        public String toString() {
            return "Node [next=" + next + ", data=" + data + "]";
        }

    }

}

誰かがこれで私を手伝ってくれるなら、私は本当に感謝するでしょう。御時間ありがとうございます!:)

4

4 に答える 4

1
public void enqueue(T newEntry) {
        Node newElement = new Node(newEntry);
        newElement.next = null;
        if(tail != null)
        {
        tail.next = newElement;
        tail = newElement;

        }else
        {
         head=tail=newElement;
        }
    }

テールがnullかどうかを確認します。tailがnullの場合、これが最初のノードであることを意味します。これを最初のノードとして追加します。尻尾の後に追加します。

于 2012-10-29T04:48:09.320 に答える
1

この行は必要ありません。nextはすでにnullになっているはずです。

newElement.next = null;

また、エンキュー後にszをインクリメントするのを忘れました。

空のリンクリストにエンキューしようとするとどうなりますか?あなたはその場合に対処しなければならないでしょう、それはあなたが得ている理由ですNullPointerException

于 2012-10-29T04:41:40.950 に答える
1

リストが空の場合は処理していません。最初の項目を追加してtailいるnullのですが、適切な例外が発生しています。

tail使用する前に、それが正しいかどうかを確認しnull、そうである場合は適切に行動する必要があります。head同様に設定することを忘れないでください。

于 2012-10-29T04:45:17.920 に答える
0

enqueueメソッドはに設定しようとtail.nextnewElementます。テールがまだ初期化されていない場合はどうなりますか?NullPointerExceptionが発生します。

于 2012-10-29T04:41:55.960 に答える