160.相交链表-力扣
最近由于工作需要,开始着手刷力扣。
这道题目可以理解为一道追及相遇的数学题目。
要找到相交节点,那么la 和 lb 指针必须走过相同的距离。当la指针沿着A链表走过(m + x) 后,到达尾节点,这时让la指向B链表的头节点headB。同理,当lb指针沿着B链表走过(n+x)后,到达尾节点,让其指向A链表的头节点。然后继续遍历链表,必然能找到相交节点。 应为la的距离为(m+x)+n , lb的距离为(n+x)+m。
附源代码如下
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode la = headA;
ListNode lb = headB;
while(la != null || lb != null){
if(la == lb){ //如果两指针指向同一位置,说明找到了相交节点,返回节点。
return la;
}
if(la != null){
la = la.next; //如果la指向的节点不为空且不是相交节点,则指针后移一个节点
}
else{
la = headB; //如果la指向null,则将la指向B链表的头节点,这里涉及到一个数学公式
}
if(lb != null){
lb = lb.next;
}
else{ //同上
lb = headA;
}
}
return null;
}
}
不足之处,敬请指正!