2301_79952122 2023-12-29 20:47 采纳率: 0%
浏览 4

链表有关疑问,可以帮我看一看吗,很久都没有想出来



```c
//链表的插入:按照学号的顺序插入
void link_insert_num(STU **p_head,STU *p_new)
{
    STU *pb,*pf;
    pb=pf=*p_head;
    if(*p_head ==NULL)// 链表为空链表
    {
        *p_head = p_new;
        p_new->next=NULL;
        return ;
    }
    while((p_new->num >= pb->num)  && (pb->next !=NULL) )
    {
        pf=pb;
        pb=pb->next;
    }
 
    if(p_new->num < pb->num)//找到一个节点的num比新来的节点num大,插在pb的前面
    {
        if(pb== *p_head)//找到的节点是头节点,插在最前面
        {
            p_new->next= *p_head;
            *p_head =p_new;
        }
        else
        {
            pf->next=p_new;
            p_new->next = pb;
        }
    }
    else//没有找到pb的num比p_new->num大的节点,插在最后
    {
        pb->next =p_new;
        p_new->next =NULL;
    }
}

从这里开始是我的疑问:
``   if(pb== *p_head)//找到的节点是头节点,插在最前面
        {
            p_new->next= *p_head;
            *p_head =p_new;
        }这是我这段代码中不懂的地方,如果把p_new赋给*p_head,那么p_new->next不就指向自己了吗?我不知道我的逻辑哪里有问题,感谢帮我指出来,我真的想了好久想不明白。`
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-29 22:16
    关注

    【以下回答由 GPT 生成】

    //链表的插入:按照学号的顺序插入
    void link_insert_num(STU **p_head, STU *p_new) {
        STU *pb, *pf;
        pb = pf = *p_head;
        if (*p_head == NULL) { // 链表为空链表
            *p_head = p_new;
            p_new->next = NULL;
            return;
        }
    
        while((p_new->num >= pb->num) && (pb->next != NULL)) {
            pf = pb;
            pb = pb->next;
        }
    
        if(p_new->num < pb->num) { 
            if(pb == *p_head) { 
                p_new->next = *p_head; // 这里赋值的是链表的头节点,不是 p_new 自己
                *p_head = p_new; // 将 p_new 设为链表的头节点
            } else {
                pf->next = p_new; // 修改前一个节点的指针
                p_new->next = pb; // 修改新节点的指针
            }
        } else {
            pb->next = p_new; // 将新节点插在链表末尾
            p_new->next = NULL;
        }
    }
    

    在这段代码中,p_new->next = *p_head 不是让 p_new 指向自己,而是将 p_new 的 next 指针指向链表的头节点,然后将 p_new 设为链表的头节点。这里还需要对前一个节点的指针和新节点的指针进行修改,以保证链表的连接是正确的。希望以上解释能够帮助你理解这段代码。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥15 有人会用py或者r画这种图吗
  • ¥15 MOD04_3K图像预处理
  • ¥15 [VASP]关于超胞大小和k 点网格的收敛性测试
  • ¥15 pip下载paddle2onnx离谱错误
  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777