Likou 160交差リンクリスト(ダブルポインター方式+ハッシュテーブル方式)

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;
    }

}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/ambitionLlll/article/details/113921612
おすすめ