Leetcode-每日一题【1669.合并两个链表】

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

题目

给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。

请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。

下图中蓝色边和节点展示了操作后的结果:

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

请你返回结果链表的头指针。

示例 1:

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法

输入:list1 = [0,1,2,3,4,5], a = 3, b = 4,

           list2 = [1000000,1000001,1000002]
输出:[0,1,2,1000000,1000001,1000002,5]
解释:我们删除 list1 中下标为 3 和 4 的两个节点,并将 list2 接在该位置。上图中蓝色的边和节点为答案链表。 

示例 2:

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

 文章来源地址https://www.toymoban.com/news/detail-535409.html

输入:list1 = [0,1,2,3,4,5,6], a = 2, b = 5,

           list2 = [1000000,1000001,1000002,1000003,1000004]
输出:[0,1,1000000,1000001,1000002,1000003,1000004,6]
解释:上图中蓝色的边和节点为答案链表。

提示:

  • 3 <= list1.length <= 104
  • 1 <= a <= b < list1.length - 1
  • 1 <= list2.length <= 104

 

解题思路

举个栗子:

输入:list1 = [0,1,2,3,4,5,6], a = 2, b = 5,

           list2 = [1000000,1000001,1000002,1000003,1000004]

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法

1.我们首先设置一个 prev 和 last 对 list1 进行遍历,找 list1 的第 a 个节点和第 b- 1 个节点

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 2.找到之后我们设置一个节点 last1 指向 last.next,也就是我们的 b 节点。

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法

3.然后令 last.next = null ,断开我们需要删除的节点。

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

4.再设置一个 last2 找出 list2 链表的尾节点

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

5.现在我们将链表连接起来就完成了,

      prev.next = list2;
      last2.next = last1;
      return list1; 

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法  

 

 

代码实现

class Solution {
    public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
        ListNode prev = list1;
        for(int i = 1; i < a; i++){
            prev = prev.next;
        }
        ListNode last = list1;
         for(int j = 0; j < b; j++){
            last = last.next;
        }
        ListNode last1 = last;
        last1 = last1.next;
        last.next = null;
        ListNode last2 = list2;
        while(last2.next != null){
            last2 = last2.next;
        }
        prev.next = list2;
        last2.next = last1;
        return list1;
    }
}

测试结果

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法

Leetcode-每日一题【1669.合并两个链表】,算法每日一题,leetcode,链表,算法 

 

到了这里,关于Leetcode-每日一题【1669.合并两个链表】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • (链表) 剑指 Offer 52. 两个链表的第一个公共节点 ——【Leetcode每日一题】

    难度:简单 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则

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

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

    2024年02月13日
    浏览(38)
  • (链表) 143. 重排链表 ——【Leetcode每日一题】

    难度:中等 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L 0 L_0 L 0 ​ → L 1 L_1 L 1 ​ → … → L n − 1 L_{n-1} L n − 1 ​ → L n L_n L n ​ 请将其重新排列后变为: L 0 L_0 L 0 ​ → L n L_n L n ​ → L 1 L_1 L 1 ​ → L n − 1 L_{n-1} L n − 1 ​ → L 2 L_2 L 2 ​ → L n − 2 L_{n-2} L n −

    2024年02月08日
    浏览(47)
  • 2023-08-27 LeetCode每日一题(合并区间)

    点击跳转到题目位置 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 示例 2: 提示: 1 = intervals.length = 10 4 intervals[i].length == 2 0 = s

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

    题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/ 两个链表都是升序链表,新建一个链表,引入伪头节点作为辅助节点,将各节点添加到伪节点之后,再用一个cur节点指向新链表的末尾 遍历两个链表,对比每个节点值,将更小的链表节点加入到新链表中 如果其中一

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

    题目链接 👉 LeetCode 21.合并两个有序链表👈 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 取小的进行尾插 👇 图解 👇 取小的进行尾插 👇 图解 👇 🥰 希望烙铁们能够理解欧! 总结🥰 以上就是本题讲解的全部内

    2024年02月13日
    浏览(49)
  • LeetCode21.合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 : 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 创建一个新的链表头节点(dummyNode)和一个指针current,用于表示当前节点。 在一个while循环中,比较两个链表的节

    2024年02月20日
    浏览(40)
  • Leetcode-每日一题【143.重排链表】

    给定一个单链表  L   的头节点  head  ,单链表  L  表示为: 请将其重新排列后变为:  不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1:     输入: head = [1,2,3,4,5] 输出: [1,5,2,4,3] 提示: 链表的长度范围为  [1, 5 * 104] 1 = node.val = 1000 1.首先我们

    2024年02月11日
    浏览(42)
  • Leetcode-每日一题【206.反转链表】

    给你单链表的头节点  head  ,请你反转链表,并返回反转后的链表。 示例 1: 输入: head = [1,2,3,4,5] 输出: [5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0, 5000] -5000 = Node.val = 5000   1.我们遍历链表,首先设置

    2024年02月12日
    浏览(36)
  • Leetcode-每日一题【61.旋转链表】

    给你一个链表的头节点  head  ,旋转链表,将链表每个节点向右移动  k   个位置。 示例 1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例 2:   输入: head = [0,1,2], k = 4 输出: [2,0,1] 提示: 链表中节点的数目在范围  [0, 500]  内 -100 = Node.val = 100 0 = k = 2 * 109 1.根据题目给出

    2024年02月11日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包