题目

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解析

模板题

代码

  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* mergeTwoLists(ListNode* l1, ListNode* l2) {
  12. ListNode* h1 = l1;
  13. ListNode* h2 = l2;
  14. ListNode* dummy = new ListNode(0);
  15. ListNode* h = dummy;
  16. while (h1 && h2) {
  17. if (h1->val < h2->val) {
  18. h->next = h1;
  19. h1 = h1->next;
  20. } else {
  21. h->next = h2;
  22. h2 = h2->next;
  23. }
  24. h = h->next;
  25. }
  26. h->next = h1 ? h1 : h2;
  27. ListNode* retNode = dummy->next;
  28. delete dummy;
  29. return retNode;
  30. }
  31. };