(160)-(Intersection of Two Linked Lists)-(尾巴相同的list)-(不仅仅是求交集,理解题目的意思很重要)
public class Solution
{
public ListNode getIntersectionNode(ListNode headA, ListNode headB)
{
if(headA==null||headB==null)
{
//因为求的是交集
return null;
}
ListNode final_ans=headA;
ListNode tail_ans=headA;
ListNode moveA=headA;
ListNode moveB=headB;
int a_len=0;
int a_tail=0;
while(moveA!=null)
{
a_len++;
a_tail=moveA.val;
tail_ans=moveA;
moveA=moveA.next;
}
int b_len=0;
int b_tail=0;
while(moveB!=null)
{
b_len++;
b_tail=moveB.val;
moveB=moveB.next;
}
//如果连尾巴都不一样,那么肯定么有交集了
if(a_tail!=b_tail)
{
return null;
}
//让长的那个先走,直到两个一样长
int com_len =Math.min(a_len, b_len);
for(int i=0;i<a_len-com_len;i++)
{
headA=headA.next;
}
for(int i=0;i<b_len-com_len;i++)
{
headB=headB.next;
}
int flag=0;
for(int i=0;i<com_len;i++)
{
if(headA.val!=headB.val)
{
headA=headA.next;
headB=headB.next;
flag=0; //之后遇到的仍然算是第一次
continue;
}
//如果兩者相等
else
{
if(flag==0)
{
//第一次相等
final_ans=headA;
flag=1; //之后就不是第一次了
}
}
}
return final_ans;
}
}