```c
void unit(linklist A,linklist B,linklist C){
linklist p,q,s;
C->next=NULL;
p=A->next;
q=B->next;
while(p!=NULL&&q!=NULL){
if(p->data<=q->data){
s=p->next;
p->next=C->next;
C->next=p;
p=s;
}else{
s=q->next;
q->next=C->next;
C->next=q;
q=s;
}
if(p==NULL){
C->next=p;
}else{
C->next=q;
}
}
```将两个递增有序的单链表A、B,归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点
修改如下,供参考:
//将两个递增有序的单链表A、B,归并成一个按元素值递减(允许有相同值)有序的链表C,
//要求用A、B中的原结点形成,不能重新申请结点
void unit(linklist A,linklist B,linklist* C)
{
linklist pa = NULL, pb = NULL, pt = NULL;
if (!A || !B || (!A->next && !B->next))
{(*C) = NULL; return;}
(*C) = A;
pa = A->next;
pb = B->next;
(*C)->next = NULL;
while(pa && pb){
if(pa->data < pb->data){
pt = pa;
pa = pa->next;
pt->next = (*C)->next;
(*C)->next = pt;
}
else{
pt = pb;
pb = pb->next;
pt->next = (*C)->next;
(*C)->next = pt;
}
}
pb = pa ? pa : pb;
while (pb){
pt = pb;
pb = pb->next;
pt->next = (*C)->next;
(*C)->next = pt;
}
free(B);
}
int main()
{
linklist L = NULL, L1 = NULL, L2 = NULL;
//......
unit(L, L1, &L2);
//......
}