Simple to follow Python Code (Beats 98.82%)
Intuition\nThis problem is essentially swapping a chunk of list1 with the entirety of list2, so we need to adjust some "next" pointers to create this swap. \n\n
# Intuition\nThis problem is essentially swapping a chunk of `list1` with the entirety of `list2`, so we need to adjust some "next" pointers to create this swap. \n\n# Approach\nWe should record pointers to the last kept node of `list1` before the swap (`pointer`), the first kept node of `list1` after the swap (`pointer2`), and the start and end nodes of `list2` (`newPointer`). Then, we can adjust so that the next pointers are accordingly updated. \n\n# Complexity\n- Time complexity: $$O(n)$$\n\nSince you will have to iterate through each linked list exactly once, the time is proportional to the number of nodes in the two lists. \n\n- Space complexity: $$O(1)$$\n\nSince we only store four pointers (optimized slightly for only storing three) at a time, regardless of how long the list is, this takes **constant** space. \n\n# Code\n```\n# Definition for singly-linked list.\n# class ListNode:\n#     def __init__(self, val=0, next=None):\n#         self.val = val\n#         self.next = next\nclass Solution:\n    def mergeInBetween(self, list1: ListNode, a: int, b: int, list2: ListNode) -> ListNode:\n        pointer = list1\n        for i in range(a - 1):\n            pointer = pointer.next\n        \n        pointer2 = pointer\n        for j in range(b - a + 2):\n            pointer2 = pointer2.next\n\n        newPointer = list2\n        pointer.next = newPointer\n        while newPointer.next is not None:\n            newPointer = newPointer.next\n\n        newPointer.next = pointer2\n\n        return list1\n```
['Linked List', 'Python3']