/*
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 == NULL && pHead2 == NULL) return {};
        if(pHead1 == NULL) return pHead2;
        if(pHead2 == NULL) return pHead1;  //以上特殊情况判断
        int min;   //min找到两个链表的第一个谁小
        if(pHead1->val < pHead2->val){
            min = pHead1->val;
            pHead1 = pHead1->next;   //指针要指向下一个
        }
        else{
            min = pHead2->val;
            pHead2 = pHead2->next;
        }
        ListNode* res = new ListNode(min);  //利用min创建一个返回的链表
        ListNode* rec = res;   //头节点记录,方便返回
        while(1){
            if(pHead1 == NULL && pHead2 == NULL) break;  //退出循环
            if(pHead1 == NULL){
                res->next = pHead2;    //一个表走完了,直接指向另一个表退出
                break;
            }
            if(pHead2 == NULL){
                res->next = pHead1;
                break;
            }
            if(pHead1->val < pHead2->val){
                res->next = pHead1;    //找出小的那个,指向该节点
                res = res->next;      //res更新
                pHead1 = pHead1->next;   //这个节点的指针去下一个
                res->next = NULL;     //把这个节点从原链表摘出来
            }
            else{
                res->next = pHead2;
                res = res->next;
                pHead2 = pHead2->next;
                res->next = NULL;    //把这个节点从原链表摘出来
            }
        }
        return rec;
    }
};