数据结构与算法整理

链表-合并两个升序链表

2020-03-05  本文已影响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;
}

上一篇下一篇

猜你喜欢

热点阅读