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

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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀