因为合并后的链表的头结点值为原头结点值较小的链表的首值,因此在头结点值较小的链表上合并,取出另一个链表上结点的值插入到该链表上合适的位置,最后返回头结点值小的链表。
/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        //只要有一个表为空就返回另一个表头结点
        if(!pHead1){
            return pHead2; 
        }
        if(!pHead2){
            return pHead1;
        }
        ListNode *p1=pHead1,*p2=pHead2,*q1,*q2;
        //下面几行代码让p1永远指向头结点值较小的链表,并在此链表上合并,最后也是返回头结点值小的链表
        bool a=(pHead1->val<pHead2->val)?1:0;
        if(a){
            p1=pHead1;p2=pHead2;
        }
        else{
            p1=pHead2;p2=pHead1;
        }
        //合并链表,因为需要用p1与p1->next的值夹比,p1所指链表循环终止条件为p1->next==NULL
        while(p1->next && p2){
            if(p1->val<=p2->val && p1->next->val>=p2->val){
                q1=p1->next;
                q2=p2;
                while(q2->next && p1->next->val>q2->next->val){//一口气插入范围内值的所有结点
                    q2=q2->next;
                }
                p1->next=p2;
                p2=q2->next;
                q2->next=q1;
                p1=q1;
            }
            else{
                p1=p1->next;
            }
        }
        if(p2){//连接剩余的链表
            p1->next=p2;
        }
        return (a==1)?pHead1:pHead2;
    }
};