Java easy solution - beats 100% Time O(n) Space - O(1)
Approach\n Assign left pointer as list1 and traverse till you find a value\n Have middle pointer and traverse till you find b value\n Map the left to list2 and 
**Approach**\n* Assign `left` pointer as `list1` and traverse till you find `a` value\n* Have `middle` pointer and traverse till you find `b` value\n* Map the `left` to `list2` and traverse till the end\n* At last assign the next element of the `list2` as the next element of the `middle` pointer\n```\nclass Solution {\n    public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {\n        ListNode left = list1;\n        for (int i = 1; i < a; i++)\n            left = left.next;\n        \n        ListNode middle = left;\n        for (int i = a; i <= b; i++)\n            middle = middle.next;\n        \n\t\tleft.next = list2;\n        while (list2.next != null)\n            list2 = list2.next;\n        \n        list2.next = middle.next;\n        return list1;\n    }\n}\n```
['Java']