Judie 发表于 2021-4-7 13:38:38

【朱迪的LeetCode刷题笔记】21. Merge Two Sorted Lists #Easy #C


21. Merge Two Sorted Lists #Easy


Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.


Example 1:

Input: l1 = , l2 =
Output:


Example 2:

Input: l1 = [], l2 = []
Output: []


Example 3:

Input: l1 = [], l2 =
Output:


Constraints:

The number of nodes in both lists is in the range .
-100 <= Node.val <= 100
Both l1 and l2 are sorted in non-decreasing order.


C
/**
* Definition for singly-linked list.
* struct ListNode {
*   int val;
*   struct ListNode *next;
* };
*/


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    if (l1 == NULL) {
      return l2;
    }
    if (l2 == NULL) {
      return l1;
    }
    struct ListNode* returnNode = malloc(sizeof(struct ListNode));
    if (l2->val < l1->val) {
      returnNode->val = l2->val;
      l2 = l2->next;
      returnNode->next = NULL;
    } else {
      returnNode->val = l1->val;
      l1 = l1->next;
      returnNode->next = NULL;
    }
    struct ListNode* curNode = returnNode;
    while (1) {
      if (l1 == NULL) {
            curNode->next = l2;
            break;
      } else if (l2 == NULL) {
            curNode->next = l1;
            break;
      } else {
            struct ListNode *newNode = malloc(sizeof(struct ListNode));
            if (l2->val < l1->val) {
                newNode->val = l2->val;
                l2 = l2->next;
                newNode->next = NULL;
                curNode->next = newNode;
                curNode = newNode;
            } else {
                newNode->val = l1->val;
                l1 = l1->next;
                newNode->next = NULL;
                curNode->next = newNode;
                curNode = newNode;
            }
      }
    }
    return returnNode;
}



20分钟左右写出来的吧

页: [1]
查看完整版本: 【朱迪的LeetCode刷题笔记】21. Merge Two Sorted Lists #Easy #C