Two ascending linked lists are merged into one ascending linked list

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;
}

First find the first linked list with a smaller or equal node and mark it as header1. The while loop finds the predecessor node of the node in header1 that is larger than the data element to be merged by header2, and connects the subsequent nodes of the head node of the header linked list After header1, continue to compare the successor nodes of header2. Until all the nodes in header2 are compared. If the successor node of header1 is NULL, just connect the successor node of the header node directly to the back of header1, and there is no need to perform the operation of moving the node.
Insert picture description here

Guess you like

Origin blog.csdn.net/geeksoarsky/article/details/107027172