void insert(int number){
Node* temp0 = NULL;
Node* temp1 = head;
Node* temp = new Node();
int sum = 0;
while(temp1!= NULL && sum<=number){
// loop condition edited, before it was temp1!= NULL && sum>=number
sum+=temp1->content;
temp0=temp1;
temp1=temp1->next;
}
if(temp0 == NULL){
temp->content = number;
temp->next = head;
if(head!=NULL){
head->content -= temp->content;
}
head = temp;
}
else{
temp0->next = temp;
temp->content = number - sum;
temp1->content -= temp->content;
temp->next = temp1;
}// end of else
}// end of void insert
以前の質問の 1 つで説明した問題に遭遇しましたが、それでも自分で解決策を実装しようとしています。要するに、「相対」リストを作成したいのです。たとえば、要素1 5 7 2 4 6
の場合、リストは次のようになります1 1 2 1 1 1
優先度キュー リストを作成1 2 4 5 7 6
し、前の要素に対して相対的に要素を変更します。最初の要素は 1 のまま、2 番目は 2-1 = 1、3 番目は 4-2 = 2、4 番目は 5-4 = 1 になります。等々。優先キューを形成すると、現在の要素をその値と前の要素の値の差で置き換えます。挿入機能の実装に問題があります。コードは質問の上部に記載されています。
アイデアは、リストを調べて、「違い」(Node* 構造のコンテンツ フィールド) をカウンター変数に追加することです。合計カウンターが挿入する必要がある要素以上になると、挿入する位置が見つかりました。
temp0 が null の場合、要素を最初の位置に挿入します。それが唯一の要素ではない場合は、次の要素のコンテンツを更新します。これは、前の最初の要素でした。
数値をリストの途中 (または末尾) に挿入する必要がある場合は、コンテンツを sum - number として更新します。これは数値 >= 0 で問題ありません。また、new の次の要素 ( temp1
)の内容を として更新しtemp->content - temp->content
ます。
何らかの理由で、これは機能しません。4 2 8
の代わりに を挿入すると、結果リストとして2 2 4
取得されます。4 -2 6