ホームページ >Java >&#&チュートリアル >2 つの LinkedList の共通部分

2 つの LinkedList の共通部分

PHPz
PHPzオリジナル
2024-07-21 08:54:58832ブラウズ

Intersection of two LinkedLists

問題

ブルートフォースアプローチ:

時間計算量: O(N+M) ここで、N と M は指定された 2 つの LinkedList の長さです。

直感

両方のノードの長さを見つけて、長さの差を取得します
両方のリストの長さの差だけ最長のリストを先に進みます。これにより、両方のリストは同じ長さから始まります。
同じノードが見つかった場合に戻ります。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int lenA = findLength(headA);
        int lenB = findLength(headB);
        ListNode A = headA;
        ListNode B = headB;

        int diff = Math.abs(lenA-lenB);
        if(lenA > lenB){
            A = travelAhead(A,diff);
        }
        else B = travelAhead(B,diff);

        return findIntegersection(A,B);
    }
    public ListNode findIntegersection(ListNode a, ListNode b){
        while(a!=null && b!=null){
            if(a.equals(b)) return a;
            a= a.next;
            b= b.next;
        }
        return null;
    }
    public ListNode travelAhead(ListNode head, int diff){
        while(diff-->0){
            head = head.next;
        }
        return head;
    }
    public int findLength(ListNode head){
        int count = 0;
        while(head!=null){
            head = head.next;
            count++;
        }
        return count;
    }
}

以上が2 つの LinkedList の共通部分の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。