
如題:我們有兩種解決辦法
第一種
分別計算兩個鏈表長度,然后計算差值,設差值為x,另長的鏈表先跳x步,然后在另兩個鏈表一塊跳,跳到相等的節點停下,此時即為結果,
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int sizeA=0,sizeB=0;
ListNode ahead=headA,bhead=headB;
while(headA!=null){
headA=headA.next;
sizeA++;
}
while(headB!=null){
headB=headB.next;
sizeB++;
}
int cha=Math.abs(sizeB-sizeA);
if(sizeA>sizeB){
for(int i=0;i<cha;i++){
ahead=ahead.next;
}
while(ahead!=bhead&&ahead!=null){
ahead=ahead.next;
bhead=bhead.next;
}
return ahead;
}
else{
for(int i=0;i<cha;i++){
bhead=bhead.next;
}
while(bhead!=ahead&&bhead!=null){
ahead=ahead.next;
bhead=bhead.next;
}
return bhead;
}
}
}
第二種 用一種浪漫的方法解決 a走完a的路,繼續走b的,b同樣同時走完b的路走a的,當兩個人相遇的時候就是我們想要的節點
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode ahead=headA,bhead=headB;
while(ahead!=bhead){
ahead=ahead!=null?ahead.next:headB;
bhead=bhead!=null?bhead.next:headA;
}
return ahead;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278582.html
標籤:其他
