张大同AA 2016-07-21 11:04 采纳率: 60%
浏览 2992
已采纳

我不是很懂这个合并两个单向链表,大家能不能给我每行注释下,

void merge_link(link_list A,link_list B)
{
link_list h,p,q;
p = A->next;
q = B->next;
free(B);
h = A;
while( p && q )
{
if(p->data <= q->data )
{
h->next = p;h = p;p = p->next;
}
else { h->next = q ; h = q ; q = q->next;}
}
if(p == NULL)p = q;
h->next = p;

}

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-07-21 11:32
    关注
     这段代码的目的是,合并两个有序的链表,保持合并后的链表还是有序,所以才写了这么多代码,如果仅仅是合并,只要把第二个链表头添加到第一个链表尾就可以了。
    
    void merge_link(link_list A,link_list B)
    {
    link_list h,p,q;
    p = A->next; //p表示第一个链表的当前节点
    q = B->next; //q表示第二个链表的当前节点
    free(B);
    h = A; // h表示新链表的当前节点
    while( p && q ) //循环,直到两个链表都遍历结束
    {
    if(p->data <= q->data ) //如果q的当前节点大
    {
    h->next = p;h = p;p = p->next; //把p插入到h的后面;h指向p,也就是新链表当前的最后一个节点;p往后移动一个
    }
    else { h->next = q ; h = q ; q = q->next;} //把q插入到h的后面;h指向q,也就是新链表当前的最后一个节点;q往后移动一个
    }
    if(p == NULL)p = q; //如果p已经遍历结束了
    h->next = p; //直接把q插入,不需要再判断了
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号