链表问题为了解题方便,一般都会建立伪头节点dummyhead。其他部分按照归并排序一样比较并尾部插入就行了。如果有一个指针指向nullptr,那么另一个指针所指链表剩下的数一定都要大于当前尾部的数,直接尾部插入即可。

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        ListNode* dummyhead = new ListNode(0), *tail = dummyhead, *p1 = pHead1, *p2 = pHead2;
		while (p1 && p2) {
			if (p1->val < p2->val) {
				tail->next = p1;
				tail = p1;
				p1 = p1->next;
			}
			else {
				tail->next = p2;
				tail = p2;
				p2 = p2->next;
			}
		}
		if (!p1) tail->next = p2;
		else tail->next = p1;
		return dummyhead->next;
    }
};