問題
時間計算量: 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 サイトの他の関連記事を参照してください。