链表问题为了解题方便,一般都会建立伪头节点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; } };