题目描述
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。
思路
这道题是判断两个链表有没有交点,如果有返回交点,如果没有返回null,题的交点是这个节点即在A链表上又在B链表上,说明这A和B是相交的,如果两个链表是相交的,这两个链表的结构是
因为链表A和链表B相交于D的话,说明节点D在链表A上也在链表B上,而D之后的元素自然也是均在A和B上了,因为他们是通过next指针相连的,如果两个链表是相交的话,每个链表的头指针会先走完自己的链表的长度,然后在走另一个链表,因为这个时候每个头结点走的距离是一样的,都是AD+BD+DC,走的速度一样,距离也是相同的,所以一定会走到相同的节点D上。如果不相交最后就会走到null节点上返回null。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode a = headA;//链表A的指针
ListNode b = headB;//链表B的指针
while(a != b){//循环的条件是两个链表不相等
//到达链表末尾时,重新走另一条链表的路
a = a == null ? headB : a.next;//判断链表的节点是不是null,如果不是就继续向下走
b = b == null ? headA : b.next;//判断链表的节点是不是null,如果不是就继续向下走
}
return a;//最后返回相加的节点,这里返回a或b均可
}
}