給你兩個鏈表 list1 和 list2 ,它們包含的元素分別為 n 個和 m 個,
請你將 list1 中第 a 個節點到第 b 個節點洗掉,并將list2 接在被洗掉節點的位置,
下圖中藍色邊和節點展示了操作后的結果:
請你回傳結果鏈表的頭指標,
示例 1:
輸入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
輸出:[0,1,2,1000000,1000001,1000002,5]
解釋:我們洗掉 list1 中第三和第四個節點,并將 list2 接在該位置,上圖中藍色的邊和節點為答案鏈表,
示例 2:
輸入: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
思路:一步一步操作即可
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
//1.找到鏈表1的第a-1個節點
ListNode nodea = list1;
for(int i = 0; i < a - 1; i++){
nodea = nodea.next;
}
//2.找到鏈表1的第b+1個節點
ListNode nodeb = nodea.next;
for(int i = a; i < b; i++){
nodeb = nodeb.next;
}
nodeb = nodeb.next;
//3.找到鏈表2的尾節點
ListNode tail = list2;
while(tail.next != null){
tail = tail.next;
}
//4.將鏈表2插入到鏈表1的第a個和第b個節點之間
nodea.next = list2;
tail.next = nodeb;
return list1;
}
}
CSDN認證博客專家
Go/GoLang
Redis
MySQL
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267368.html
標籤:java
