题目链接: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
}
}
本文详细介绍了如何使用双指针法找到两个链表的交点。通过同时遍历两个链表,当指针相遇时,即找到了交点。如果无交点,最终两个指针都会指向null。示例代码展示了具体的实现过程。
861

被折叠的 条评论
为什么被折叠?



