算法思想
一开始没有看懂题意,不知道从哪来的公共节点,原来是题目自己给的;
也不知道题目例子的意思,看讨论区才知道是把第二个链表插在第一个链表的第10个位置的前面,那么第二个链表就是
[1 2 3 4 5 6 7 10 11 12 13 14],
// 例子
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[1, 2, 3, 4, 5, 6, 7]
10
解法:p走完a后走b,q走完b后走a,那么p走完了a + b + c,q也是a + b + c,最后p和q会在公共节点处相遇
java代码
class Solution {
public ListNode findFirstCommonNode(ListNode a, ListNode b) {
ListNode p = a, q = b;
while(p != q)
{
if(p != null) p = p.next;
else p = b;
if(q != null) q = q.next;
else q = a;
}
return p;
}
}
错误代码
因为a和b的公共节点并不是和next一一对应的,所以不能这么写
class Solution {
public ListNode findFirstCommonNode(ListNode headA, ListNode headB) {
while(a != null || b != null)
{
if(a == b) return a;
a = a.next;
b = b.next;
}
return null;
}
}