相交链表
题目描述
编写一个程序,找到两个单链表相交的起始节点。
题解(java)
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//如果两个链表有一个为空链表,则没有相交节点
if (headA == null || headB == null) return null;
ListNode pA = headA, pB = headB;
//遍历终止条件:pa = pb
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
图示
Tips:
- 注意:当两链表相交时,那么相交点之后的长度是一样的
详解
- 1>.两个链表不管长度为多少,两链表节点数量相加的值为恒定的。所以(pa+pb)的总路程 - 相交之后相同的路程 = pa,pb相交之前的路程,所以两指针会在交点处相遇。
如上图 - 2>.首先判断一下,两链表中是否有空链表,如果有,则不是相交链表
- 3>.进入遍历,遍历终止条件:pa == pb
【 pA = pA == null ? headB : pA.next; 如果在pA != pB的情况下,pA == null,则说明A链表遍历到了尾节点,开始遍历B链表;
pB = pB == null ? headA : pB.next;; 如果在pA != pB的情况下,pB == null,则说明B链表遍历到了尾节点,开始遍历A链表;
当 pA == pB时,如果是相交链表,返回pA;如果不是相交链表pAPBnull,返回结果为null 】
声明
- 原作者:E.L.E
- <商业转载请获得原作者使用授权,非商业转载请注明来处,欢迎大家评论>