题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
思路:两个指针对应两条链一起遍历,当一条遍历完就去遍历另一条(两个指针都是这样操作),这样最后两个指针一定会相等。如果有交叉,最后两个指针都指向同一个节点(交叉位置),如果没有交叉,最后两个指针都指向null(有交叉,没交叉,都是正好把所有节点遍历了一遍)。当两个指针相等的时候,返回它们指向的节点(或者指向的null)即可。
上代码:
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
class Solution {
fun getIntersectionNode(headA: ListNode?, headB: ListNode?): ListNode? {
if (headA == null || headB == null) return null
var a = headA
var b = headB
while (a != b) {
a = if (a == null) {
headB
} else {
a.next
}
b = if (b == null) {
headA
} else {
b.next
}
}
return a
}
}