音悦843 2022-02-21 20:35 采纳率: 80%
浏览 47
已结题

C语言中将数组元素值赋给链表中各节点

NODE *creatlist(int a[])
{
    NODE *h,*p,*q;
    int i;
    h=(NODE *)malloc(sizeof(NODE));
    h->next=NULL;                                                   
    for(i=0;i<N;i++)
    {
        q=(NODE *)malloc(sizeof(NODE));
        q->data=a[i];                                          
        q->next=NULL;                                                
     if(h->next==NULL)                                           
        h->next=p=q;                                         
    else
    {
        p->next=q;                                                   
        p=q;
    }
    }
    return h;
}

if语句和else 语句那里看不懂,返回值为h 为什么我感觉是只有一次给h的一个节点赋值。该怎么理解,求解答。

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-02-21 21:22
    关注

    这种最好还是画图理解,但是我懒得画图了。。。
    注意:NODE 节点应该是链表, 每个节点应该是对应自己的data,和next

    struct Node
    {
    int data;
    struct Node* next;
    };

    假设 p只有一个node节点

    刚开始:NODE(h)===》h->.next(NULL)
    第一个节点插入: NODE(h)===》h->next(q)(同时把p指向这里)===>q->next(NULL)
    也就是说,每次之后:NODE(h)===》h->next(XXX)==》。。。==>p(永远指向最后一个位置)===>p->next(NULL)

    后面就是一直在上面链表结构上进行插入,给p->next指向新节点,同时把p换到新节点表示链表最后位置

    NODE *creatlist(int a[])
    {
        NODE *h,*p,*q;
        int i;
    
        h=(NODE *)malloc(sizeof(NODE)); //申请头节点 
        h->next=NULL; 
    
        for(i=0;i<N;i++) //这里是遍历数组 
        {
            //先定义一个节点,往链表中进行插入
            q=(NODE *)malloc(sizeof(NODE));
            q->data=a[i];                                          
            q->next=NULL;    
    
            //这是链表的最后进行插入的逻辑
            if(h->next==NULL) //h节点是头节点,最终链表头节点标志
            {
                h->next=q;    //这里不要按照你的写法写,单独对每个赋值
                             //如果只有一个节点, 已经创建的节点放在链表最后
                p = q;      //   把p节点指向链表的最后节点位置
            }                                                                              
            else
            {
                p->next=q;  //p指向的是链表最后,在他的next进行连接新节点就好                  
                p=q;       //重新把p指向链表的最后位置
            }
        }
        return h;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 已采纳回答 7月31日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)