-1

そのため、次のコードが与えられましたが、私の知る限り、変更は許可されていません。

public void insertionSort () {
    if (head == tail) {
        // empty list is sorted
        return;
    }
    Node nextNode = head.next; // start inserting second node
    while (nextNode != tail) {
        // set insertNode to node to be inserted in this iteration
        Node insertNode = nextNode; 
        // set nextNode to node to be inserted in next iteration
        nextNode = nextNode.next;  

        // find position where insertNode has to be inserted
        Node current = insertNode.prev;
        while (current != null && insertNode.value.compareTo(current.value) < 0) {
            current = current.prev;
        }

        // insert insertNode after current
        insertNode.moveAfter(current);
    }
}

私はリンクされたリストにあまり詳しくありませんが、2番目の while ループが最初の繰り返しで動作するかどうかを知ることができるので、このコードは null を moveAfter() に渡します これまでの moveAfter() については:

 /**
     * Inserts this node after the specified node. If this and the specified node 
     * refer to the same node in the list, the list remains unchanged. If the 
     * specified node current is null, then this node is inserted at the head of 
     * the list.
     *
     * Precondition: this Node and the specified node are two nodes of this list
     *               this node and the specified node are not equal to the tail
     * 
     * @param node - the node in this list after which this node is inserted
     */
    public void moveAfter (Node node) {
        if(this.prev == null && node.next == null){
            throw new NoSuchElementException();
        }
        if(node.prev == null && node.next==null){
            throw new NoSuchElementException();
        }
        if(this == tail){
            throw new NoSuchElementException();
        }
        if(node == tail){
            throw new NoSuchElementException();
        }

          this.prev.next = this.next;
          this.next = node.next;
          node.next = this;                            
          this.prev = node;
    }
}  

insertSort() が null を moveAfter() に渡すことが正しい場合、これを修正して「現在」を元の値にリセットするにはどうすればよいですか。

*補足: 私の質問が読みにくい場合や正しく質問されていない場合は、お詫び申し上げます。私はこのウェブサイトでそれらを台無しにするコツを持っているようです.

4

1 に答える 1

2

moveAfter()メソッドの状態の前のコメント:

指定された現在のノードが null の場合、このノードはリストの先頭に挿入されます。

insertionSort()変数を使用するためhead、これはメンバー変数でありmoveAfter()、仕様に記載されているように使用することもできます。

于 2013-01-22T21:48:55.540 に答える