これはホワイトボード化されており、メモリ不足エラーが発生する理由を理解できないようです。このプロジェクトは、リンクされたリストとそのメソッドのいくつかをゼロから作成することです。私の他の機能は良いですが、このスワップ機能は私に多くの問題を与えています。スワップメソッドのトラブルシューティング 'from scratch' Javaのリンクリスト
デバッガを実行すると、プログラムはpj.nextNodeLink = p.nextNodeLinkでクラッシュします。スワップ関数は、2つのint入力を取り、それらの値を入れ替えることになっています。 nextNodeLinkポインタを変更しようとしていましたが、明らかに失敗しています。どんな助けでも大歓迎です!あなたのコードがどのように動作する
public void swapByIndex(int firstIndexValue, int secondIndexValue){
if(firstIndexValue<0 || secondIndexValue<0 || firstIndexValue>size-1 || secondIndexValue>size-1) {
throw new ArrayIndexOutOfBoundsException();
}
else if(head == tail){ // Case one - only one element in list
System.out.println("The list only has one element. Nothing to swap. ");
}
else{ // Case Two - two or more elements
//keep a pointer to the next element of head
Node firstPointer = head;
Node firstSwapElement = firstPointer;
for(int k=0; k<firstIndexValue; k++){
firstSwapElement = firstPointer; // save the node P is on into 'previ' node
firstPointer = firstPointer.nextNodeLink; // P iterates to next node
}
Node secondPointer = head;
Node secondSwapElement = secondPointer;
for(int k=0; k<secondIndexValue; k++){
secondSwapElement = secondPointer;
secondPointer = secondPointer.nextNodeLink;
}
Node secondNodeSave = secondPointer; // save this so we have the correct next node link for second swap
secondPointer.nextNodeLink = firstPointer.nextNodeLink;
firstSwapElement.nextNodeLink = secondSwapElement;
firstPointer.nextNodeLink = secondNodeSave.nextNodeLink;
secondSwapElement.nextNodeLink = secondPointer;
}
}
まあ私は混乱しています。 "pkはj変数を保持しています" ...おそらくあなたの命名規則をクリーンアップすると、実際のエラーを見つけやすくなります... – John3136
ポイントを獲得しました。コードを更新しました。 –
スワップを実行しているときには、単にa = bを実行することはできません。 b = a; 'またはそれらはちょうど同じ値になります - 値の1つを最初に一時変数に入れる必要があります。 'tmp = a; a = b; b = tmp; ' –