【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

这篇具有很好参考价值的文章主要介绍了【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Leetcode-21.合并两个有序链表

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

示例 1:
输入:l1 = [1, 2, 4], l2 = [1, 3, 4]
输出:[1, 1, 2, 3, 4, 4]

示例 2:
输入:l1 = [], l2 = []
输出:[]

示例 3:
输入:l1 = [], l2 = [0]
输出:[0]

我们的思路是,先定义两个结构体的空指针head和tail,然后先第一次比较list1和list2,谁小就把它的头节点赋给head和tail,然后更新list1或者list2;如图:

【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】
然后进入循环进行比较,当list1和list2都为非空,就进入循环,比较list1和list2谁小,假如list1小就把它放到tail的next,然后更新tail,更新list1;list2也同理;直到其中有一个空,就把另外一个非空的直接链接上tail的next;如图:

【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】

		struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
		{
		    //list1和list2其中一个链表为空,返回另外一个
		    if (list1 == NULL)
		    {
		        return list2;
		    }
		
		    else if (list2 == NULL)
		    {
		        return list1;
		    }
		
		    //定义两个结构体的指针
		    struct ListNode* head = NULL;
		    struct ListNode* tail = NULL;
		
		    //首先第一次比较,比较list1和list2谁小,就把这个头节点赋给head和tail
		    if (list1->val < list2->val)
		    {
		        head = tail = list1;
		        list1 = list1->next;
		    }
		
		    else
		    {
		        head = tail = list2;
		        list2 = list2->next;
		    }
		
		    //当list1和list2都不为空,循环继续
		    while (list1 && list2)
		    {
		        //开始逐一比较,假如list1小就把它放到tail的next,然后更新tail,更新list1
		        if (list1->val < list2->val)
		        {
		            tail->next = list1;
		            tail = tail->next;
		            list1 = list1->next;
		        }
		
		        //list2小或者等于就把它放到tail的next,然后更新tail,更新list2
		        else
		        {
		            tail->next = list2;
		            tail = tail->next;
		            list2 = list2->next;
		        }
		    }
		
		    //直到其中有一个空,就把另外一个非空的直接链接上tail的next
		    if (list1 == NULL)
		    {
		        tail->next = list2;
		    }
		    else
		    {
		        tail->next = list1;
		    }
		
		    return head;
		}

Leetcode-83.删除排序链表中的重复元素

题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。

示例 1:
输入:head = [1, 1, 2]
输出:[1, 2]

示例 2:
输入:head = [1, 1, 2, 3, 3]
输出:[1, 2, 3]

我们的思路是,定义两个指针,寻找重复的元素,当两个指针指向的元素相等,就将第一个先出现的指向第二次出现的next,如下图:

【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】文章来源地址https://www.toymoban.com/news/detail-423071.html

		struct ListNode* deleteDuplicates(struct ListNode* head)
		{
		    //head为空指针,返回空指针
		    if (head == NULL)
		    {
		        return NULL;
		    }
		
		    //定义cur和del指针,cur从头开始,del从cur的next开始
		    struct ListNode* cur = head, * del = head->next;
		
		    //当del不为空
		    while (del)
		    {
		        //当cur的val等于del的val,即出现了重复元素
		        if (cur->val == del->val)
		        {
		            //将del的next赋给cur的next,即cur指向了del的next
		            cur->next = del->next;
		
		            //更新del
		            del = del->next;
		        }
		
		        //当cur的val不等于del的val,即不是重复元素
		        else
		        {
		            //更新cur和del
		            cur = cur->next;
		            del = del->next;
		        }
		    }
		    return head;
		}

到了这里,关于【Leetcode -21.合并两个有序链表 -83.删除排序链表中的重复元素】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言 | Leetcode C语言题解之第21题合并两个有序链表

    题目: 题解:

    2024年04月12日
    浏览(39)
  • 图灵日记之Leetcode删除有序数组中的重复项&&合并两个有序数组&&移除链表元素

    给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过

    2024年02月04日
    浏览(58)
  • 21.合并两个有序链表

    一、思路 二、源码 创建一个新链表 两个链表比较,小于等于取下来尾插 循环结束条件为任意一个链表为空 最后将之剩下的链表直接尾插

    2024年01月23日
    浏览(44)
  • 21. 合并两个有序链表

     

    2024年02月12日
    浏览(33)
  • 力扣21. 合并两个有序链表

    题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  链接:21. 合并两个有序链表 - 力扣(LeetCode) 题解 设置两个指针head和tail,head用来指向新链表的头结点,tail用来进行新链表的尾插。比较两个链表,取较小的结

    2024年02月16日
    浏览(72)
  • 合并两个有序链表——力扣21

    题目描述 法一 递归

    2024年02月15日
    浏览(46)
  • 【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表

    简单 相关标签 相关企业 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 示例 2: 示例 3: 提示: 两个链表的节点数目范围是 [0, 50] -100 = Node.val = 100 l1 和 l2 均按 非递减顺序 排列 拉拉链法 两个链表就相当于

    2024年03月12日
    浏览(83)
  • 第21关:基于链表的两个递增有序序列的合并

    任务描述 本关任务:给定两个递增的整数序列A和B,利用链表表示序列A和B,将A和B合并为一个递增的有序序列C,序列C不允许有重复的数据。要求空间复杂度为O(1)。 编程要求 输入 多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为

    2024年02月05日
    浏览(57)
  • Leetcode算法递归类—合并两个有序链表

    目录 21. 合并两个有序链表 题解: 代码: 将两个升序链表合并为一个新的  升序  链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例 1: 示例 2: 示例 3: 提示: 两个链表的节点数目范围是  [0, 50] -100 = Node.val = 100 l1  和  l2  均按  非递减顺序  

    2024年02月13日
    浏览(39)
  • LeetCode - #83 删除排序链表中的重复元素

    我们社区陆续会将顾毅( Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。 )的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新了 82 期,我们会保持更新时间和进度( 周一、周三、周五早上 9:00 发布 ),每期的内容不多,

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包