兩個升序鏈表合併爲一個升序鏈表

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 後面即可,不必再執行移動結點的操作。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章