很简单

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode() : val(0), next(nullptr) {}
    7. * ListNode(int x) : val(x), next(nullptr) {}
    8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
    9. * };
    10. */
    11. class Solution {
    12. public:
    13. ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
    14. ListNode *head = new ListNode;
    15. ListNode *p1 = list1, *p2 = list2, *p = head;
    16. if (p1 == nullptr && p2 == nullptr) return nullptr;
    17. if (p1 == nullptr && p2 != nullptr) return p2;
    18. if (p1 != nullptr && p2 == nullptr) return p1;
    19. while (true) {
    20. if (p1->val <= p2->val) {
    21. p->next = p1;
    22. p1 = p1->next;
    23. } else {
    24. p->next = p2;
    25. p2 = p2->next;
    26. }
    27. p = p->next;
    28. if (p1 == nullptr) {
    29. p->next = p2;
    30. break;
    31. }
    32. if (p2 == nullptr) {
    33. p->next = p1;
    34. break;
    35. }
    36. }
    37. return head->next;
    38. }
    39. };

    执行结果:
    通过
    显示详情
    添加备注
    执行用时:4 ms, 在所有 C++ 提交中击败了92.63% 的用户
    内存消耗:14.5 MB, 在所有 C++ 提交中击败了18.85% 的用户
    通过测试用例:208 / 208