首页 > 试题广场 >

要求将hb表归到ha表中

[问答题]

设有两个单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。

List Union( List ha, List hb )
//ha,hb是两个无头结点的数据域值递增有序的单链表
//本算法实现将hb中不出现在ha中的数据合并到ha中,同时合并中不破坏hb链表
{
    List head = (List)malloc(sizeof(LNode));
    head->next = ha;
    Lnode pa,pb,pTmp;
    pa = ha;
    pb = hb;
    pTmp = head;//pTmp指向当前待合并结点的前驱
    
    while ( pa&&pb ) {
        if ( pa->data < pb->data ) {
            pTmp->next = pa;
            pTmp = pa;
            pa = pa->next;            
        }
        else if ( pa->data > pb->data ) {
            Lnode Lr = (Lnode)malloc(sizeof(Lnode));
            Lr->data = pb->data;
            pTmp->next = Lr;
            pb = pb->next;
        }
        else {//pa->data == pb->data
            pTmp->next = pa;
            pTmp = pa;
            pa = pa->next;
            pb = pb->next;
        }
    }
    
    if ( pa ) {
        pTmp->next = pa;
    }
    else {
        while ( pb ) {
            Lnode  Lr = (Lnode)malloc(sizeof(Lnode));
            Lr->data = pb->data;
            pTmp->next = Lr;
            pTmp = Lr;
            pb = pb->next;
        }
        pTmp->next = NULL;
    }
    
    free(head);
    return ha;
}

发表于 2019-08-02 10:29:00 回复(0)