【leetcode C语言实现】剑指 Offer 25. 合并两个排序的链表

题目描述

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

示例1:

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

0 <= 链表长度 <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof

解题思路

对两个链表进行分析,若链表1的头节点小于链表2的头节点,则将链表1的头节点“弹出”,并将其添加到新的合成链表后面,链表1剩下的部分和链表2再进行比较,重复上述过程,直到两个两个链表为空。比较和“弹出”的过程是重复的,因此可采用递归法进行实现。

代码

/**
 * 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 *phead = NULL;
    if(l1->val < l2->val)
    {
        phead = l1;
        phead->next = mergeTwoLists(l1->next, l2);
    }
    else
    {
        phead = l2;
        phead->next = mergeTwoLists(l1, l2->next);
    }

    return phead;
}

执行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sunshine_hanxx/article/details/107499171