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 后面即可,不必再执行移动结点的操作。