每周一道算法题(十七)

本周由于公司周年庆,组织活动出去玩,所以写的有点晚了。言归正转,题目难度”Easy”

题目:将两个从小到大排列的有序链表(可以为空)合并成一个从小到大排列的有序链表。

思路:既然人家都给你把链表排列好了,那你只要比个大小就行了,很简单,直接看代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    //排除空链表
    if (l1 == NULL || l2 == NULL) {
        if (l1 == NULL) return l2;
        else return l1;
    }
    //创建一个链表的头部
    struct ListNode* head,*temp;
    if (l1->val > l2->val) {
        head = l2;
        l2 = l2->next;
    }else {
        head = l1;
        l1 = l1->next;
    }
    temp = head;
    //遍历链表
    while (l1 != NULL || l2 != NULL) {
        //解决空链表的问题
        if(l1 == NULL || l2 == NULL) {  
            if(l1 == NULL) {
                temp->next = l2;
                l2 = l2->next;
            }else {
                temp->next = l1;
                l1 = l1->next;
            }
        //比较链表数值大小
        }else if (l1->val > l2->val) {
            temp->next = l2;
            l2 = l2->next;
        }else {
            temp->next = l1;
            l1 = l1->next;
        }
        temp = temp->next;
    }
    return head;
}

下周见〜〜

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

    原文作者:CrazySteven
    原文地址: https://www.jianshu.com/p/a7469c456c1e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞