gpt4 book ai didi

c++ - C++中的链表队列

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:52 24 4
gpt4 key购买 nike

很抱歉这是一个相当长的问题...我正在为队列的链表实现制作一个特定的函数。这个函数叫做 int Queue::modify(int item),它接受一个整数,如果这个整数在队列中出现不止一次,我必须从中删除所有出现的整数除了第一个队列。

例如,如果我的队列看起来像 [1,2,2,2,2,2,3] 并且项目是 2,则生成的队列看起来像 [1,2,3]。但是,我的代码正在输出 [1,2,2,2,3]。

下面是我的代码,下面是我对如何尝试实现它的解释:

int Queue::modify(int item){
node* curr = front;
node* temp;
int counter = 0;

if (curr == NULL){
return 0;
}
//checking to see if first instance of queue is == item
if (curr->data == item){
counter++;
}

//checking to see if instances after first instance of queue is == item
while (curr != NULL){
if (curr->next != NULL){
temp = curr->next;
if (temp->data == item){
counter ++;
if (counter > 1){
if (curr->next->next != NULL){
curr->next = curr->next->next; //I think something is wrong here??
}
delete temp;
}
}
curr = curr->next;
}
//this is for the last instance of the queue, so curr->next == NULL
else{
if (curr->data == item){
counter++;
if (counter > 1){
delete curr;
curr = NULL;
}
else
curr = curr->next; //so curr should be NULL now
}
else
curr = curr->next; //so curr should be NULL now
}
}
return counter;
}

所以基本上,我尝试的是 temp = curr->next 这样如果 curr->next->data == item,那么我可以有 curr's next 指针指向 temp 之后的节点,以便列表仍然链接,curr->next = curr->next->next,然后删除 temp,如下图所示:

enter image description here

我有一种感觉,我在放屁,curr->next = curr->next->next 不正确...提前感谢您对错误的任何建议用我的代码!此外,这是家庭作业,所以虽然我绝对喜欢完整的代码解决方案,但请不要发布完整的代码解决方案......谢谢! :D

最佳答案

在这些行中,

if (counter > 1){
if (curr->next->next != NULL){
curr->next = curr->next->next; //I think something is wrong here??
}

您正在跳过节点。周围的代码需要是:

if (temp->data == item)
{
counter ++;
if (counter > 1){
curr = temp->next;
delete temp;
}
}
else
{
curr = curr->next;
}

关于c++ - C++中的链表队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28803769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com