21. 合并两个有序链表

image.png

迭代

执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户 内存消耗:38 MB, 在所有 Java 提交中击败了9.27% 的用户

  1. class Solution {
  2. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  3. if (l1 == null) return l2;
  4. if (l2 == null) return l1;
  5. ListNode temp = new ListNode(0);
  6. ListNode cur = temp;
  7. while (l1 != null && l2 != null) {
  8. if (l1.val < l2.val) {
  9. cur.next = l1;
  10. l1 = l1.next;
  11. } else {
  12. cur.next = l2;
  13. l2 = l2.next;
  14. }
  15. cur = cur.next;
  16. }
  17. if (l1 != null) cur.next = l1;
  18. if (l2 != null) cur.next = l2;
  19. return temp.next;
  20. }
  21. }

递归

执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户 内存消耗:37.8 MB, 在所有 Java 提交中击败了64.76% 的用户

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        if (l2 == null) return l1;

        if (l1.val < l2.val) {
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        } else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }
}