合并两个排序的链表:最直观的想法是,双指针,pHead1指向指针1,pHead2指向指针2,使用head表示空头结点,使用tail表示尾部结点,tail初始为head,当pHead1以及pHead2均不为空时,分为三种情况,第一种是pHead1的值小于pHead2的值,那么将pHead1加入tail后面,第二种是pHead1的值大于pHead2的值,那么将pHead2加入tail后面,第三种是pHead1的值等于pHead2的值,那么将两者即pHead1和pHead2均加入tail后面。最后当其中一方为空时,将另一方不为空的依次加入tail后面即可,最后返回head->next即为链表的头结点。(链表的题其实比较偏模拟题,遇到链表题直接动手模拟一遍即可,就像下面的代码可能有些冗余,但是逻辑是非常清晰的)

ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 
{
    ListNode *head=new ListNode(0); //头结点
	ListNode *tail=head; //尾部结点
	while(pHead1&&pHead2) //两个结点均不为空
	{
		if(pHead1->val<pHead2->val) //链表1小于链表2
		{
			tail->next=pHead1;
			pHead1=pHead1->next;
			tail=tail->next;
		}
		else if(pHead1->val>pHead2->val) //链表1大于链表2
		{
			tail->next=pHead2;
			pHead2=pHead2->next;
			tail=tail->next;
		}
		else //两者相等
		{
			tail->next=pHead1;
			pHead1=pHead1->next;
			tail=tail->next;
			tail->next=pHead2;
			pHead2=pHead2->next;
			tail=tail->next;
		}
	}
	while(pHead1) //pHead1还没结束
	{
		tail->next=pHead1;
		pHead1=pHead1->next;
		tail=tail->next;
	}
	while(pHead2) //pHead2还没结束
	{
		tail->next=pHead2;
		pHead2=pHead2->next;
		tail=tail->next;
	}
	return head->next;
}