两个升序链表合并为一个升序链表

LinkList MergeHeaderLinkList(LinkList L,LinkList P)
{
     
    if(L == NULL || P == NULL)
        return L == NULL ? L : P ;
    LNode *header1,*header2,*S,*back;
    if(L->next->data <= P->next->data)
    {
     
        header1 = L;
        header2 = P;
        back = L;
    }else
    {
     
        header1 = P;
        header2 = L;
        back = P;
    }
    while(header2->next != NULL){
     
        while(header1->next != NULL && header1->next->data <= header2->next->data )
        {
     
            header1 = header1->next;
            printf("正在寻找...\n");
        }
        if(header1->next == NULL){
     
            printf("header1为空了\n");
            header1 ->next = header2->next;
            return back;
        }
        printf("找到比%d大的值%d\n",header2->next->data,header1->next->data);
        S = header2->next;
        header2->next = S->next;
        S->next = header1->next;
        header1->next = S;
        header1 = header1->next;
    }
    return back;
}

首先找到第一个结点较小或相等的链表记为 header1 ,while 循环找到 header1 中比 header2 要合并的数据元素大的结点的前驱结点,将 header 链表的头结点的后继结点连接到 header1 后面,继续比较header2的后继结点。直到 header2 中的结点全部比较完成为止。如果header1的后继结点为 NULL,直接将头结点后继结点连接到 header1 后面即可,不必再执行移动结点的操作。
两个升序链表合并为一个升序链表_第1张图片

你可能感兴趣的:(数据结构,升序链表)