面试题25

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

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

限制:

  • 0 <= 链表长度 <= 1000

注意:本题与主站 21 题相同:https://leetcode-cn.com/problems/merge-two-sorted-lists/

Solutions

  1. iteration

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode dummy, * head = &dummy;
        while (l1 && l2) {
            if (l1->val <= l2->val) {
                head->next = l1; l1 = l1->next;
            }
            else {
                head->next = l2; l2 = l2->next;
            }
            head = head->next;
        }
        head->next = l1 ? l1 : l2;

        return dummy.next;
    }
};
  1. recursion

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (l1 && l2)
            if (l1->val <= l2->val) {
                l1->next = mergeTwoLists(l1->next, l2);
                return l1;
            }
            else {
                l2->next = mergeTwoLists(l1, l2->next);
                return l2;
            }
        else
            return l1 ? l1 : l2;
    }
};

Last updated

Was this helpful?