相交链表
    编写一个程序,找到两个单链表相交的起始节点。
    如下面的两个链表
    算法练习第二十二题 - 图1
    在节点 c1 开始相交。

    示例 1:
    算法练习第二十二题 - 图2
    输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
    输出:Reference of the node with value = 8
    输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

    解题思路:拼接链表。
    1.长短链表同时开始向后走,短链表走到尽头时,长链表距离交点还剩下 长度差a+(短链表至交点处的长度b)
    2.短链表此时从长链表初始位置向后走,相等时即为交点。
    例如:
    1 2 3 4 5 5 3 4 5
    5 3 4 5 1 2 3 4 5
    此时可以看出来,3即为交点。

    1. /**
    2. * Definition for singly-linked list.
    3. * public class ListNode {
    4. * int val;
    5. * ListNode next;
    6. * ListNode(int x) {
    7. * val = x;
    8. * next = null;
    9. * }
    10. * }
    11. */
    12. public class Solution {
    13. public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    14. ListNode la = headA,lb = headB;
    15. while(la != lb){
    16. la = la!=null ? la.next : headB;
    17. lb = lb!=null ? lb.next : headA;
    18. }
    19. return la;
    20. }
    21. }