문제
시간 복잡도: O(N+M) 여기서 N과 M은 주어진 두 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; } }
위 내용은 두 LinkedList의 교차점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!