zoukankan      html  css  js  c++  java
  • [LeetCode] 1669. Merge In Between Linked Lists

    You are given two linked lists: list1 and list2 of sizes n and m respectively.

    Remove list1's nodes from the ath node to the bth node, and put list2 in their place.

    The blue edges and nodes in the following figure incidate the result:

    Build the result list and return its head.

    Example 1:

    Input: list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
    Output: [0,1,2,1000000,1000001,1000002,5]
    Explanation: We remove the nodes 3 and 4 and put the entire list2 in their place. The blue edges and nodes in the above figure indicate the result.
    

    Example 2:

    Input: list1 = [0,1,2,3,4,5,6], a = 2, b = 5, list2 = [1000000,1000001,1000002,1000003,1000004]
    Output: [0,1,1000000,1000001,1000002,1000003,1000004,6]
    Explanation: The blue edges and nodes in the above figure indicate the result.
    

    Constraints:

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

    合并两个链表。

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

    请你将 list1 中第 a 个节点到第 b 个节点删除,并将list2 接在被删除节点的位置。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-in-between-linked-lists
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    图示应该表示的很清楚了,唯一需要注意的是a和b表示的是list中的节点index + 1。其他都是常规操作了。

    时间O(n)

    空间O(1)

    Java实现

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode() {}
     7  *     ListNode(int val) { this.val = val; }
     8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     9  * }
    10  */
    11 class Solution {
    12     public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
    13         // start - list1需要remove的部分之前的一个node
    14         // end - list1需要remove的部分之后的一个node
    15         ListNode start = new ListNode(0);
    16         ListNode end = list1;
    17         int count = 0;
    18         while (end != null && count < b) {
    19             if (count == a - 1) {
    20                 start = end;
    21             }
    22             end = end.next;
    23             count++;
    24         }
    25         start.next = list2;
    26         while (list2.next != null) {
    27             list2 = list2.next;
    28         }
    29         list2.next = end.next;
    30         end.next = null;
    31         return list1;
    32     }
    33 }

    LeetCode 题目总结

  • 相关阅读:
    UVA1349 Optimal Bus Route Design 最优巴士路线设计
    POJ3565 Ants 蚂蚁(NEERC 2008)
    UVA1663 Purifying Machine 净化器
    UVa11996 Jewel Magic 魔法珠宝
    NEERC2003 Jurassic Remains 侏罗纪
    UVA11895 Honorary Tickets
    gdb调试coredump(使用篇)
    使用 MegaCLI 检测磁盘状态并更换磁盘
    员工直接坦诚直来直去 真性情
    山东浪潮超越3B4000申泰RM5120-L
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14136571.html
Copyright © 2011-2022 走看看