160. Intersection of Two Linked Lists
https://leetcode.com/problems/intersection-of-two-linked-lists/
Description
求两个链表的交点
Solutions
这两个链表的相交方式是共用一个尾部,头部不同。
如果两个链表长度是相同的,那就next比较下去就可以了。
但是,它们长度不确定,可长可短。
怎么处理一下,使它们的非公共部分的长度相等呢?
用两个指针:
虽然题目中强调了链表中不存在环,但是我们可以用环的思想来做,我们让两条链表分别从各自的开头开始往后遍历,当其中一条遍历到末尾时,我们跳到另一个条链表的开头继续遍历。两个指针最终会相等,而且只有两种情况,一种情况是在交点处相遇,另一种情况是在各自的末尾的空节点处相等。为什么一定会相等呢,因为两个指针走过的路程相同,是两个链表的长度之和,所以一定会相等。
Submissions
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//boundary check
if(headA == null || headB == null) return null;
ListNode a = headA;
ListNode b = headB;
//if a & b have different len, then we will stop the loop after second iteration
while( a != b){
//for the end of first iteration, we just reset the pointer to the head of another linkedlist
a = a == null? headB : a.next;
b = b == null? headA : b.next;
}
return a;
}
Summary
运算符优先级
先==
再?:
再=
https://www.cnblogs.com/grandyang/p/4128461.html