LeetCode 21 合并两个有序链表 题解

论坛 期权论坛 脚本     
匿名网站用户   2020-12-19 13:34   56   0

题目大意:给定两个有序链表,然后合并成一个新的链表并返回头指针。

分析:这种题目算法一般不难,主要是对链表操作的时候NULL指针的坑比较多。这道题主要有以下几种情况:

1.两个链表均为NULL;

2.一个为NULL,一个不为NULL;

3.两个链表均还有元素;

要注意的一个点是,每次我们仅对取出元素的链表移动到下一个元素即可。

代码:

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    int minm = 0x3f3f3f;
    if(l1 == NULL && l2 == NULL) {
     return NULL;
    }
    if(l1 == NULL || l2 == NULL) {
     if(l1 == NULL) {
      minm = l2 -> val;
      l2 = l2 -> next;
     } else {
      minm = l1 -> val;
      l1 = l1 -> next;
     }
    } else {
     if(l1->val > l2->val) {
      minm = l2->val;
      l2 = l2->next;
     } else {
      minm = l1->val;
      l1 = l1->next;
     }
    }
    ListNode *tmp = new ListNode(minm);
    ListNode *head = tmp;
    while(l1 != NULL || l2 != NULL) {
     int min1 = 0x3f3f3f, min2 = 0x3f3f3f;
     if(l1 != NULL) {
      min1 = l1->val;
     }
     if(l2 != NULL) {
      min2 = l2->val;
     }
     int minm;
     if(min1 > min2) {
      minm = min2;
      l2 = l2 -> next;
     } else {
      minm = min1;
      l1 = l1 -> next;
     }
     ListNode *tmp1 = new ListNode(minm);
     tmp->next = tmp1;
     tmp = tmp->next;
    }
    return head;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP