算法思想:

     方法一:非递归

      建立 一个新表LC,利用尾插法建立单链表的方法,从头结开始比较LA、LB中的数据,将LA、LB中较小的数插入到LC 中。

       1、设pa、pb分别指向LA、LB的头结点,比较两个数据,将元素较小的节点插入LC中,然后将元素较小的指针指向下一节点,另                

            一指针不动。直到有一指针指向空节点。

       2、将另一未指向空节点的指针的剩余节点全都链到 LC中。

       3、返回单链表LC。

PLinkNode MergeList(PLinkNode& LA,PLinkNode& LB)
{
                LinkNode *pa = LA;
                LinkNode *pb = LB;
                LinkNode *LC = NULL;
                LinkNode *pc;
                
              //找出两个链表中第一个结点较小的结点,LC记录较小结点的头结点
                 if(pa->_data <= pb->_data)
                {
                                LC = pa;
                                pa = pa->_next;
                }
                 else
                {
                                LC = pb;
                                pb = pb->_next;
                }
                pc=LC;
                
             //在两个链表中遍历比较,将值较小的结点链接到pc结点后
                 while (pa != NULL && pb != NULL)
                {
                                 if(pa->_data <= pb->_data )
                                {
                                                pc->_next = pa;
                                                pc = pa;
                                                pa = pa->_next;
                                }
                                 else
                                {
                                                pc->_next = pb;
                                                pc = pb;
                                                pb = pb->_next;
                                }
                }
                
             //将pa或pb剩余的结点链到pc之后,完成整个合并的过程
                 if(pa)
                                pc->_next = pa;
                 else
                                pc->_next = pb;
                 return LC;
                 /*LinkNode *LC=NULL;
                LinkNode *pa = LA;
                LinkNode *pb = LB;
                LinkNode *pc = LC;
                while(pa != NULL && pb != NULL)
                {             
                              //尾插法
                                if(pa->_data <= pb->_data)
                                {
                                                PushBack(LC,pa->_data);
                                                pa = pa->_next;
                                }
                                else
                                {
                                                PushBack(LC,pb->_data);
                                                pb = pb->_next;
                                }
                                
                }
                while(pa !=NULL)
                {
                                PushBack(LC,pa->_data);
                                pa=pa->_next;
                }

                while(pb != NULL)
                {
                                PushBack(LC,pb->_data);
                                pb = pb->_next;

                }
                return LC;*/
}


方法二: 递归

PLinkNode  MergeRecursive(PLinkNode& head1 , PLinkNode& head2)
{
                PLinkNode head = NULL ;
                 if ( head1 == NULL )
                             return head2 ;
                 if ( head2 == NULL)
                             return head1 ;
                 if ( head1->_data <= head2->_data )
                {
                                head = head1 ;
                                head->_next = MergeRecursive(head1->_next,head2);
                }
                 else
                {
                                head = head2 ;
                                head->_next = MergeRecursive(head1,head2->_next);
                }
                 return head ;
}