본문 바로가기
Leetcode

160. Intersection of Two Linked Lists

by Doromi 2023. 11. 15.
728x90
반응형
두 개의 연결 리스트가 주어졌을 때, 두 리스트가 교차하는 지점을 찾는 문제입니다. 
교차 지점이 없으면 null을 반환해야 합니다.

 

List A:  A1 → A2
                  ↘
                    C1 → C2 → C3
                   ↗
List B:B1 → B2 → B3
이 경우, 리스트 A와 리스트 B는 C1에서 교차하고, 이 지점이 교차 지점이 됩니다.

두 연결 리스트의 길이를 각각 계산합니다.
두 리스트의 길이 차이를 구하고, 길이가 더 긴 리스트의 포인터를 그 차이만큼 이동시킵니다.
이제 두 포인터를 동시에 이동시켜 교차 지점을 찾습니다.

 

 

public class ListNode {
    public int val;
    public ListNode next;
    public ListNode(int val = 0, ListNode next = null) {
        this.val = val;
        this.next = next;
    }
}

public class Solution {
    public ListNode GetIntersectionNode(ListNode headA, ListNode headB) {
        int lenA = GetLength(headA);
        int lenB = GetLength(headB);

        // 길이가 더 긴 리스트의 포인터를 차이만큼 이동
        while (lenA > lenB) {
            headA = headA.next;
            lenA--;
        }

        while (lenB > lenA) {
            headB = headB.next;
            lenB--;
        }

        // 두 포인터를 동시에 이동하며 교차 지점 찾기
        while (headA != null && headB != null) {
            if (headA == headB) {
                return headA; // 교차 지점을 찾으면 반환
            }
            headA = headA.next;
            headB = headB.next;
        }

        return null; // 교차 지점이 없는 경우
    }

    // 연결 리스트의 길이 계산
    private int GetLength(ListNode head) {
        int length = 0;
        while (head != null) {
            length++;
            head = head.next;
        }
        return length;
    }
}
위 코드는 두 연결 리스트의 길이를 계산하고, 길이 차이를 구하여 포인터를 이동시키고, 두 포인터를 동시에 이동시켜 교차 지점을 찾는 방식을 사용합니다
728x90
반응형

'Leetcode' 카테고리의 다른 글

2089. Find Target Indices After Sorting Array  (0) 2024.03.27
162. Find Peak Element  (0) 2023.11.16
455. Assign Cookies  (0) 2023.11.10
144. Binary Tree Preorder Traversal  (0) 2023.11.09
389. Find the Difference  (0) 2023.11.08