美文网首页数据结构与算法整理
链表-合并两个升序链表

链表-合并两个升序链表

作者: 茶还是咖啡 | 来源:发表于2020-03-05 08:15 被阅读0次

    两个链表升序有序,合并两个升序链表

    eg:
    L1: 1->1->2->3->5
    L2: 3->4->5->6->6
    合并后:
    1->1->2->3->3->4->5->5->6->6

    该题可以想象成创建一个新的链表,而节点是从两个旧链表中选择的过程。

    1. 通过比较两个链表头结点的小,确定本次使用的节点为h1的头结点,进行头删,然后尾插到新的链表中。


    2. 通过比较两个链表头结点的小,确定本次使用的节点为h1的头结点,进行头删,然后尾插到新的链表中。


    3. 重复上面的动作,直至其中一根链表为空,将不为空的链表直接尾插到新的链表中。


    code

    ElemSN* mergeLinkList(ElemSN *h1,ElemSN *h2){
        if(h1==NULL){
            return h2;
        }
        if(h2==NULL){
            return h1;
        }
        ElemSN *p=NULL,*tail=NULL,*hn=NULL;
        while (h1&&h2) {
            if(h1->data>h2->data){
                p=h1;
                h1=h1->next;
            }else{
                p=h2;
                h2=h2->next;
            }
            if(hn==NULL){
                hn = p;
                tail = p;
            }else{
                tail->next=p;
                tail = tail->next;
            }
        }
        if(h1!=NULL){
            tail->next=h1;
        }else{
            tail->next=h2;
        }
        return hn;
    }
    
    

    相关文章

      网友评论

        本文标题:链表-合并两个升序链表

        本文链接:https://www.haomeiwen.com/subject/lckplhtx.html