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;
}
这段代码的目的是,合并两个有序的链表,保持合并后的链表还是有序,所以才写了这么多代码,如果仅仅是合并,只要把第二个链表头添加到第一个链表尾就可以了。
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插入,不需要再判断了
}
弱弱的问下,free(B)这一行为什么要有?