/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        ListNode* p=pHead1,*q=pHead2;
		//创建一个虚拟头结点
		ListNode* Head=new ListNode(0);
		Head->next=NULL;
		//创建尾指针尾插
		ListNode* tail=Head;
		while(p&&q)
		{
			ListNode* t=NULL;//临时存储p/q的后继
			if(p->val<=q->val)
			{
				t=p->next;
				p->next=tail->next;
				tail->next=p;
				tail=p;
				p=t;
			}
			else {
				t=q->next;
				q->next=tail->next;
				tail->next=q;
				tail=q;
				q=t;
			}
		}
		//处理还有剩余的
		if(q)  p=q;
		tail->next=p; 
		return Head->next;
    }
};