我练习结构,我得到了这样的错误:
操作数类型不兼容("节点*"和" int"), 其中node是mu结构的名称。错误出现在while(),in(p-> next = = p-> val)中。如何检查列表中的下一个对象是否是我想要使其工作的那个?
代码必须从列表中删除我给出的数字,并且需要使用此结构。
struct node
{
int val;
node *next;
};
void DelGiven(node *H, int x)
{
node *p = H;
if (H != NULL)
{
while ((p->next != NULL) && (p->next == p->val))
{
node *p2;
p = p->next;
p2 = p->next;
p->next = p2->next;
delete p2;
}
}
}
答案 0 :(得分:0)
我没有清楚地理解你的问题,但似乎你想删除它们的值等于x的所有节点,如果这是你的愿望,这将是你的答案:
void DelGiven(node *H, int x)
{
node *p = H;
node *pre = null;
if (H != NULL)
{
while ((p != NULL))
{
if (p->val==x){
if (pre !=NULL) { pre->next = p->next; }
delete p;
p=pre->next;
}else{
pre = p;
p = p->next;
}
}
}
}
如果你想删除x个节点(从列表的顶部),这将有所帮助:
void DelGiven(node *H, int x)
{
node *p = H;
if (H != NULL)
{
int i=0;
while ((p->next != NULL) && (i<x))
{
i++;
node *p2;
p = p->next;
p2 = p->next;
p->next = p2->next;
delete p2;
}
}
}
答案 1 :(得分:0)
p-&gt; next是node *的类型,p-&gt; val的类型是int。所以你得到的数据类型不匹配。 我想你需要将下一个节点的val字段与当前节点的val字段进行比较。 因此,创建一个变量来存储p-&gt;接下来,让我们说pNext = p-&gt; next然后比较值pNext-&gt; val == p-&gt; val。