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 5 7 2 4 6
,列表看起来像1 1 2 1 1 1
我将创建一个优先队列列表1 2 4 5 7 6
,然后我将更改相对于前一个元素的元素:第一个元素将保持 1,第二个元素将保持 2-1 = 1,第三个将是 4-2 = 2,第四个元素将保持 5-4 = 1等等。当我形成一个优先队列时,我会用它的值和前一个元素的值之差替换当前元素。我在实现插入功能时遇到问题。代码在问题的顶部给出。
这个想法是,我浏览列表,将“差异”(这是我的 Node* 结构的内容字段)添加到计数器变量中。当总和计数器变得大于或等于我需要插入的元素时,我找到了插入它的位置。
如果 temp0 为空,我将元素插入到第一个位置。如果它不是唯一的元素,我会更新下一个元素的内容 - head,它是前一个第一个元素。
如果需要将数字插入列表中间(或末尾)的某个位置,我将内容更新为 sum - number,这将是一个 >= 0 的数字,这没关系。此外,我将新的下一个元素 ( temp1
) 的内容更新为temp->content - temp->content
.
出于某种原因,这不起作用。当我插入4 2 8
,而不是2 2 4
,我得到4 -2 6
结果列表。