链表归并(头插法)


void merge(LNode *A, LNode *B, LNode *&C)      // *&C是新链表
{
    //待对比的指针 *p, *q
    LNode *p = A->next;
    LNode *q = B->next;
    LNode *s;      
    //只要其中一个头节点,然后将另外的释放
    C = A;
    C->next = NULL;
    free (B);
    while(p != NULL && q != NULL)
    {
        if(p->data <= q->data)
        {
            s = p; p = p->next;
           s->next = C->next; C->next = s;
        }
        else
        {
            //改为头插法
           s = q; q = q->next;
            s->next = C->next; C->next = s;
        }
    }
    if(p != NULL) 
    {
        s = p;
        p = p->next;
        s->next = C->next;
        C->next = s;
    }
    if(q != NULL)
    {
        s = q;
        q = q->next;
        s->next = C-next;
        C->next = s;
    }
}


原文地址:https://www.cnblogs.com/dsbz/p/14458266.html