首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【LeetCode每日一题】:链表(C和C++版本)

【LeetCode每日一题】:链表(C和C++版本)

作者头像
用户11915063
发布2025-11-20 09:49:44
发布2025-11-20 09:49:44
130
举报

题目链接:

21.合并两个有序链表

题目描述:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

思路:

  1. 首先判断链表是否为空,若l1为空,则直接返回l2即可,若l2为空,则直接返回l1即可
  2. 当链表不为空时,判断l1与l2节点的值的大小,小的放在前面,然后让链表往后走一个节点
  3. 当其中一个链表为空时,尾节点->next指向不为空链表即可

代码实现:

C版本:
代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 
{
    if(list1==NULL)
    {
        return list2;
    }    
    if(list2==NULL)
    {
        return list1;
    }
    ListNode*Head,*Tail;
    Head=Tail=NULL;
    Head=Tail=(ListNode*)malloc(sizeof(ListNode));

    ListNode*l1=list1;
    ListNode*l2=list2;


    while(l1!=NULL&&l2!=NULL)
    {
        if(l1->val<l2->val)
        {
            Tail->next=l1;
            Tail=Tail->next;
            l1=l1->next;
        }
        else
        {
            Tail->next=l2;
            Tail=Tail->next;
            l2=l2->next;
        }
    }
    if(l1)
    {
        Tail->next=l1;
    }
    if(l2)
    {
        Tail->next=l2;
    }
    ListNode* newHead=Head->next;
    free(Head);
    Head=NULL;
    return newHead;
}
C++版本:
代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(l1==nullptr)
            return l2;
        else if(l2==nullptr)
            return l1;
        else if(l1->val<l2->val){
            l1->next=mergeTwoLists(l1->next,l2);
            return l1;
        }
        else{
            l2->next=mergeTwoLists(l1,l2->next);
            return l2;
        }
    }
};

复杂度分析:

时间复杂度:O(N)


相关知识博客:

【数据结构初阶】--单链表(一)

【数据结构初阶】--单链表(二)

总结:这道题运用到了数据结构——链表,相关链表的结构在之前数据结构初阶的学习中就已经给大家讲解过了,大家可以翻看之前的博客进行回顾总结,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目链接:
  • 题目描述:
  • 示例:
  • 思路:
  • 代码实现:
    • C版本:
    • C++版本:
  • 复杂度分析:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档