Swordはオファーを指します—52。2つのリンクリストの最初の共通ノード—分析とコード(Java)

Swordはoffer-52を指します。2つのリンクリストの最初の共通ノード-分析とコード[Java]

1.タイトル

2つのリンクリストを入力し、それらの最初の共通ノードを見つけます。(受信データはリンクリストであるため、受信データが正しいことを確認するために、間違ったテストデータのプロンプトが他の方法で表示されることに注意してください)

2、分析とコード

1.同期場所

(1)考える

共通ノードの後、2つのリンクリストの後続のノードはまったく同じです。したがって、2つのリンクリストの対応する位置を後ろから前に同期して、最初の共通ノードを取得できます。
2つのリンクリストを別々にトラバースすることにより、それぞれの長さが取得されます。長さの差を計算した後、長いリンクリストは対応するノードの数をスキップし、同時にトラバースして、対応するノードが同じかどうかを比較します。

(2)コード

public class Solution {
    
    
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
    
    
         if (pHead1 == null || pHead2 == null)
             return null;
        int len1 = 0, len2 = 0;
        
        ListNode cHead1 = pHead1;
        ListNode cHead2 = pHead2;
        while (cHead1 != null) {
    
    
            cHead1 = cHead1.next;
            len1++;
        }
        while (cHead2 != null) {
    
    
            cHead2 = cHead2.next;
            len2++;
        }
        
        if (len1 >= len2) {
    
    
            cHead1 = pHead1;
            cHead2 = pHead2;
        }
        else {
    
    
            cHead1 = pHead2;
            cHead2 = pHead1;
        }
        for (int i = len1 - len2; i > 0; i--)
            cHead1 = cHead1.next;
        
        while (cHead1 != null && cHead2 != null && cHead1 != cHead2) {
    
    
            cHead1 = cHead1.next;
            cHead2 = cHead2.next;
        }
        return cHead1;
    }
}

(3)結果

実行時間:17ms、メモリ使用量:9660k。

3、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/110410361