そのため、次のコードが与えられましたが、私の知る限り、変更は許可されていません。
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() に渡すことが正しい場合、これを修正して「現在」を元の値にリセットするにはどうすればよいですか。
*補足: 私の質問が読みにくい場合や正しく質問されていない場合は、お詫び申し上げます。私はこのウェブサイトでそれらを台無しにするコツを持っているようです.