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 後面即可,不必再執行移動結點的操作。