/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
if(pHead1==nullptr) return pHead2;
if(pHead2==nullptr) return pHead1;
ListNode* head = (pHead1->val <= pHead2->val)
? pHead1 :pHead2 ;
ListNode* i = head;
ListNode* j = (pHead1 == i) ? pHead2 : pHead1;
while(i->next && j)
{
if(i->next->val >= j->val)
{
ListNode* j_next = j->next;
j->next = i->next;
i->next = j;
j = j_next;
}
else
{
i = i->next;
}
}
if(i->next == nullptr)
i->next = j;
return head;
}
};