合并链表(笔记)

本文介绍了两种方法来合并两个升序链表:一是递归实现,展示了链表与递归的巧妙结合;二是迭代方式,通过指针操作实现。两种解法都展示了在LeetCode等编程平台上解决链表问题的不同策略。
摘要由CSDN通过智能技术生成

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

在网上看到的一个感觉还挺厉害的解法,利用了递归调用,感觉链表居然还能跟递归扯上关系,打开了新思路

见代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    if(list1==NULL)return list2;
    if(list2==NULL)return list1;
    struct ListNode* mergedList;
    if(list1->val<=list2->val)
    {
        mergedList=list1;
        mergedList->next=mergeTwoLists(list1->next,list2);
    }
    else
    {
        mergedList=list2;
        mergedList->next=mergeTwoLists(list1,list2->next);
    }
    return mergedList;
}

这是两个链表(没有头结点),list1指向第一个链表的首个结点,list2指向第二个链表的首个结点,然后mergedList指向的是排序之后形成的新的链表

另外一种解法:

​
/**
 * 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 *l1,*l2;
    l1=list1;
    l2=list2;
    ListNode *p1,*p2;
    p1=(ListNode*)malloc(sizeof(ListNode));
    p2=p1;
    while(l1!=NULL&&l2!=NULL)
    {
        if(l1->val<=l2->val)
        {
            p2->next=l1;
            l1=l1->next;
            p2=p2->next;
        }
        else
        {
            p2->next=l2;
            l2=l2->next;
            p2=p2->next;
        }
    }
    if(l1!=NULL)p2->next=l1;
    if(l2!=NULL)p2->next=l2;
    return p1->next;
}

​

这两个代码都是在力扣网站上看到的题解,真的很服那个递归调用的。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值