ここにカタログタイトルを書く
1.タイトル
2.私の最初の考えと問題:
質問を見て、ダブルポインター方式を考えましたが、コードのロジックに少し問題がありました。解決策を見た後、書き直して送信してください。
3.問題解決方法1:ダブルポインター法
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode temp1 = headA;
ListNode temp2 = headB;
while(temp1 != temp2){
temp1 = temp1 == null ? headB:temp1.next;
temp2 = temp2 == null ? headA:temp2.next;
}
return temp1;
}
}
temp1 = temp1 == null?HeadB:temp1.next;ステートメントを例として取り上げます。
ここでは、temp1がポイントするのではなく、headBまたはtemp1.nextをtemp1に直接割り当てます。後で遭遇を比較する必要があります。ノードが同じかどうか。ここでこれに注意してください。
4.問題解決方法2:ハッシュテーブル法
リンクリストAをトラバースし、各ノードのアドレス/参照をハッシュテーブルに格納します。次に、リンクリストBの各ノードbiがハッシュテーブルにあるかどうかを確認します。そうである場合、biは交差ノードです。
アイデアによると、私はコードを直接書きました:
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
Set<ListNode> set =new HashSet<ListNode>();
ListNode temp1 = headA;
ListNode temp2 = headB;
while(temp1 != null){
set.add(temp1);
temp1 = temp1.next;
}
while(temp2 != null){
if(set.contains(temp2)){
return temp2;
}
temp2 = temp2.next;
}
return null;
}
}