题目:
分析:如果两个链表有相交的部分,那么需要让两个链表都走到相交的位置,但问题就出现了,相交前的长度可能是不一样的,怎么可以同时走到相交的位置呢。接着分析发现如果有相交的部分,那么相交后的部分,长度一定是一样的,也就是只有前面未相交的部分长度可能是不一样的,那么想到凑成总长度相同的话问题就得到解决了,怎么凑呢?
可以把前面未相交的部分互相拼接起来,怎么拼?
可以每个链表走到末尾的时候从头去走别人的链表,这样总长度一定是一样的,长度一样速度也一样,如果有相交的话必定能碰上,即使不相交,总长度也还是一样这个结论不变,那么会同时走到“末尾”null
代码:
/**
* 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 headAA = headA;
ListNode headBB = headB;
while(headAA != headBB){
headAA = headAA == null ? headB : headAA.next;
headBB = headBB == null ? headA : headBB.next;
}
//headBB一样
return headAA;
}
}