给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。markdown
请你将 list1 中第 a 个节点到第 b 个节点删除,并将list2 接在被删除节点的位置。spa
输入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002] 输出:[0,1,2,1000000,1000001,1000002,5] 解释:咱们删除 list1 中第三和第四个节点,并将 list2 接在该位置。上图中蓝色的边和节点为答案链表。code
class Solution {
func mergeInBetween(_ list1: ListNode?, _ a: Int, _ b: Int, _ list2: ListNode?) -> ListNode? {
// step1
let preA = findPreA(list1, a)
// step2
let nextB = findNextB(list1, b)
// step3
let l2Tail = findL2Tail(list2)
// step4
preA?.next = list2
l2Tail?.next = nextB
return list1
}
func findPreA(_ list1: ListNode?, _ a: Int) -> ListNode? {
var cur = list1
var step = a - 1
while step > 0 {
cur = cur?.next
step -= 1
}
return cur
}
func findNextB(_ list1: ListNode?, _ b: Int) -> ListNode? {
var cur = list1
var step = b
while step > 0 {
cur = cur?.next
step -= 1
}
let result = cur?.next
cur?.next = nil
return result
}
func findL2Tail(_ list2: ListNode?) -> ListNode? {
var cur = list2
while cur?.next != nil {
cur = cur?.next
}
return cur
}
}
复制代码