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 }