相交链表 leetcode 160
题目大意:给定两个链表,如果有共同交点就返回第一个交点,没有就返回null
解题思路:数学解法,假设a链表长度为A,b链表长度为B,C为交点长度,那么a未相交的距离为C- A,b为C- B,当指针从a开始遍历再遍历一遍b链表走到第一个交点时和从b遍历再遍历一遍a链表走到交点时的长度为 A+(B- C) \ B+(A- C),此时这两个式子相等,说明了这个走法会重合在第一个节点。k神这个思路真的太牛了
/*** 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 a = headA, b = headB;while (a != b ){if (a == null)a = headB;else a = a.next;if (b == null)b = headA;else b = b.next;}return a;}
}
总结:为什么不相交也不会死循环呢,就算不相交,我们也可以理解为相交到了最后一个节点NULL,所以没有死循环的说法了