记录这题原因是有点被它举的例子误导了,顺便分享一下自己写的方法,虽然长但是很好理解。
解题思路:
(1)分别得到两个链表的长度;
(2)让长度长的链表先走,走到与短链表长度相同为止;
(3)然后两个指针同时走,边走边比较,直到两个指针的相等为止。
注意:
是两个指针相等,不是值相等,不要被例子误导了
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null || headB==null) return null;
//计算第一个链表的长度
ListNode l1=headA;
int len1=1;
while(l1.next!=null) {
l1=l1.next;
len1++;
}
//计算第二个链表的长度
ListNode l2=headB;
int len2=1;
while(l2.next!=null) {
l2=l2.next;
len2++;
}
//如果两个链表是相交的,最后在尾结点处l1和l2必相等,不然不相交
if(l1!=l2) {
return null;
}
//让较长的链表先走
ListNode t1=headA;
ListNode t2=headB;
if(len1>len2) {
int d=len1-len2;
while(d!=0) {
t1=t1.next;
d--;
}
}else {
int d=len2-len1;
while(d!=0) {
t2=t2.next;
d--;
}
}
//同时走,直到指针相同,注意不是值相同,是指针
while(t1!=t2) {
t1=t1.next;
t2=t2.next;
}
return t1;
}
结果: