所以我有一个分配,包括制作一个程序,允许我在列表上找到三次值10之后在链表上输入整数10。我必须插入的10个需要在第三个10之后。我为此程序编写的代码如下:
Linkedlist<int>*prt=new LinkedList<int>;
bool found = false;
int count;
while(ptr==NULL & !found)
{
if (ptr -> info == 10)
count ++;
if(count == 3)
found = true;
if(!found)
ptr = ptr -> next;
Node NewNode = new Node;
if(count == 3)
NewNode -> info = 10;
NewNode -> next = ptr -> next;
ptr -> next = NewNode;
}
我认为我所做的代码是正确的,但是,我对如何将这段代码转换为正在运行的程序感到很遗憾。任何帮助将不胜感激。
答案 0 :(得分:1)
您的程序中有多个错误。例如,变量prt
应该是ptr
。此外,您的while条件应该使用&&
布尔运算符而不是&
按位运算符。从您的描述中可以看出,循环的最后两行:
NewNode -> next = ptr -> next;
ptr -> next = NewNode;
只应在count == 3
时调用。但是,在它的当前形式中,它们正在每次循环迭代中执行。同样,您只应在实际计划插入时创建NewNode
。
您还要多次检查条件count == 3
,包括间接通过found
变量。这些条件中的每一个都可以折叠为单个if
,如下所示:
if (count == 3) {
found = true;
Node NewNode = new Node;
NewNode->info = 10;
NewNode->next = ptr->next;
ptr->next = NewNode;
} else {
ptr = ptr->next;
}
你应该强烈考虑你编写的任何循环以及你想通过循环维护哪些循环不变量,以及每次循环迭代会发生什么变化,这样你就可以确定性地结束你的循环。 / p>
此外,每当您处理以前从未使用过的新型数据结构时,我建议使用方框和箭头绘制一个小图表。这将帮助您找出您需要遵循的过程,以获得您想要的东西。
我将从初始图表开始,然后是最终图表,显示您想要的图片。然后绘制一个标记,该标记对应于遍历列表的指针。在每一步中将标记移动一次循环。然后尝试以代码形式实现您使用标记执行的步骤。
以下是我使用Google文档绘制的一些示例启动图:
假设虚线箭头表示NULL指针。这为您的链表提供了三个可能的起始案例。