【问题标题】:a value of type int cannot be assigned to an entity of type node不能将 int 类型的值分配给 node 类型的实体
【发布时间】:2014-03-26 11:43:40
【问题描述】:

我练习结构,但我遇到了这样的错误:

操作数类型不兼容(“node*”和“int”), 其中 node 是 mu 结构的名称。在 (p->next == p->val) 中的 while() 中出现错误。如何检查列表中的下一个对象是否是我正在寻找使其工作的对象?

代码必须从列表中删除我给定的编号,并且需要使用这种结构。

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;
        }
    }
}

【问题讨论】:

  • 这段代码你打算做什么?你要删除 p 之后的所有节点,除非 (p->next == p->val) ,但这意味着 p->next == p->val 吗?

标签: list structure


【解决方案1】:

我没有清楚地理解您的问题,但您似乎想删除其值等于 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;
        }
    }
}

【讨论】:

    【解决方案2】:

    p->next 是 node* 类型,p->val 是 int 类型。所以你会得到数据类型的不匹配。 我想您需要将下一个节点的 val 字段与当前节点的 val 字段进行比较。 所以创建一个变量来存储 p->next,假设 pNext = p->next 然后比较值,pNext->val ==p->val。

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多