/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * 
 * @param pHead1 ListNode类 
 * @param pHead2 ListNode类 
 * @return ListNode类
 */
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    // write code here
    if(pHead1==NULL&&pHead2==NULL){
        return pHead1;
    }
    if(pHead1==NULL){
        return pHead2;
    }
    if(pHead2==NULL){
        return pHead1;
    }
    struct ListNode* p;
    if(pHead1->val<pHead2->val){
        p=pHead1;
        pHead1=pHead1->next;
    }
    else{
        p=pHead2;
        pHead2=pHead2->next;
    }
    p->next=NULL;
    struct ListNode* newhead=p;
    struct ListNode* r;
    while(pHead1&&pHead2){
        if(pHead1->val<pHead2->val){
            r=pHead1->next;
            pHead1->next=p->next;
            p->next=pHead1;
            p=pHead1;
            pHead1=r;
        }
        else{
            r=pHead2->next;
            pHead2->next=p->next;
            p->next=pHead2;
            p=pHead2;
            pHead2=r;
        }
    }
    if(pHead1){
        p->next=pHead1;
    }
    else{
        p->next=pHead2;
    }
    return newhead;
}