leetcode-合并两个有序链表(c语言)

本文介绍了一种将两个有序链表合并成一个新的有序链表的方法,包括迭代和递归两种实现方式。迭代方法通过创建一个新的链表来存储合并后的元素,而递归方法则直接在原链表上进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
//可用递归,相对简洁但是这里用新链表来存储
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef  struct listNode{
      int val;
      struct listNode *next;
 };
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *l3,*l4,*l5;
    l3=(struct listNode *)malloc(sizeof(struct listNode));
    l4=l3;
    while(l1||l2)
    {   
        l5=(struct listNode *)malloc(sizeof(struct listNode));
        if(l1&&l2){
            if(l1->val<=l2->val)
            {
                l5->val=l1->val;
                l1=l1->next;
            }else {
                    l5->val=l2->val;
                    l2=l2->next;
                  }
            }else if(l1){
                     l5->val=l1->val;
                     l1=l1->next;
            }else {
                    l5->val=l2->val;
                    l2=l2->next;
                    }
                l4->next=l5;
                l4=l5;
    }
   l4->next=NULL;
    return l3=l3->next;
}

递归:

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    if(l1==NULL)return l2;
    if(l2==NULL)return l1;
    if(l1->val < l2->val){
        l1->next = mergeTwoLists(l1->next,l2);
        return l1;
    }else{
        l2->next = mergeTwoLists(l1,l2->next);
        return l2;
    }
}

第一个为递归代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值