【问题】
现有两个单链表A、B,他们的元素都是递增有序。
编写算法将A、B 归并成一个按元素值递减有序的(允许有相同值)
链表C、要求用A、B、中的原结点形成,不能重新申请新节点。
/*两个单链表的有序合并*/
LinkList Merge(LinkList A,LinkList B)
{
LinkList C;
LNode *p,*q;
p = A->next; q = B->next;
C = A;
C->next = NULL; //杜绝野指针
free(B); //*_*//
while(p && q){
if(p->data < q->data){
s = p; p = p->next;
} else {
s = q; q = q->next;
} /* if - else */
s->next = C->next;
C->next = s;
} /* while */
if(p == NULL) p = q;
while (p)
{
s = p; p = p->next;
s->next = C->next;
C->next = s;
} /*while(p)*/
} /*while( p && q)*/
}
本文介绍了一种将两个递增有序的单链表合并为一个递减有序链表的算法。该算法不使用额外的空间,而是复用原链表的节点。通过遍历两个链表并比较每个节点的数据,实现链表的逆序合并。
587

被折叠的 条评论
为什么被折叠?



