题目
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
样例
输入:1->3->5 , 2->4->5
输出:1->2->3->4->5->5

解法:二路归并

建立一个头结点,方便处理特殊情况
时间复杂度O(n),空间复杂度O(1)

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* merge(ListNode* l1, ListNode* l2) {
  12. auto h = new ListNode(-1);
  13. auto h1 = l1, h2 = l2, h3 = h;
  14. while (h1 && h2) {
  15. if (h1->val < h2->val) {
  16. h3->next = h1;
  17. h1 = h1->next;
  18. }
  19. else {
  20. h3->next = h2;
  21. h2 = h2->next;
  22. }
  23. h3 = h3->next;
  24. }
  25. h3->next = h1 ? h1 : h2;
  26. return h->next;
  27. }
  28. };