两个链表的第一个公共结点
存在两种情况
-
第一种:两个链表存在公共结点,那么假设第一个链表单独部分长为a,第二个长为b,公共部分长为c;
那么,由a+c+b=b+c+a可知,可以找到公共结点 -
第二种:两个链表不存在公共结点,那么从第一个链表开始遍历长度为a+b,从第二个链表开始为b+a,最后指针都指向空, 结束循环。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class Solution {
public ListNode findFirstCommonNode(ListNode headA, ListNode headB) {
ListNode p = headA, q = headB;
while (p != q) {
if (p != null)
p = p.next;
else
p = headB;
if (q != null)
q = q.next;
else
q = headA;
}
return p;
}
}