Решение
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
fun getIntersectionNode(headA: ListNode?, headB: ListNode?): ListNode? {
var aPointer = headA
var bPointer = headB
// Если один из списков достигает конца, перескакиваем на другой список
while (aPointer != bPointer) {
aPointer = if (aPointer == null) headB else aPointer.next
bPointer = if (bPointer == null) headA else bPointer.next
}
// Когда они совпадают, это точка пересечения (или null)
return aPointer
}