相交链表
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
在节点 c1 开始相交。
示例 1:
输入: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即为交点。
/*** 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,lb = headB;while(la != lb){la = la!=null ? la.next : headB;lb = lb!=null ? lb.next : headA;}return la;}}
