1669. Merge In Between Linked Lists

#### QUESTION:

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 indicate 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 <= 10^4
1 <= a <= b < list1.length - 1
1 <= list2.length <= 10^4
``````

#### EXPLANATION:

1.首先将list2的最后一个节点找到， 这样后面就可以拼接list1，b后面的了
2.对list1进行遍历，用一个index来标识当前的索引号
3.如果索引号正好等于a,b 那么就可以直接插入， 记得是用前一个的next来拼接list2的头
4.如果索引号等于a，那么久拼接list2的头
5.如果索引等于b，那么就用list2的尾部拼接后面的

#### SOLUTION:

``````class Solution {
func mergeInBetween(_ list1: ListNode?, _ a: Int, _ b: Int, _ list2: ListNode?) -> ListNode? {
var list2Last:ListNode
var head2 = list2
while head2?.next != nil {
}
var tmp:ListNode = ListNode(-1)
tmp.next = list1
var index:Int = 0
var head = tmp
while tmp != nil && tmp.next != nil {
if index == a && index == b {
var temp:ListNode? = tmp.next?.next
tmp.next = list2
list2Last.next = temp
break
} else if index == a {
var temp:ListNode? = tmp.next
tmp.next = list2
tmp = temp!
} else if index == b {
var temp:ListNode? = tmp.next?.next
list2Last.next = temp
break
} else {
tmp = tmp.next!
}
index += 1
}