题目:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
思路:
A和B两个链表长度可能不同,但是A+B和B+A的长度是相同的,所以
两个节点先遍历自己再遍历对方一定是同时结束
。
如果A,B相交的话A和B有一段尾巴是相同的,所以两个遍历的指针一定会同时到达第一个交点
如果A,B不相交的话两个指针就会同时到达尾部,即出现null=null的情况。
实现代码如下:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode l1 = headA, l2 = headB;
while (l1 != l2) {
//如果走完自己的路,开始走对方的路
l1 = l1 == null ? headB : l1.next;
l2 = l2 == null ? headA : l2.next;
}
return l1;
}