ACWING66. 목록의 첫 번째 두 가지 일반적인 노드 (제안은 안전을 증명하기 위해)

두 입력 목록, 첫 공통 노드를 찾을 수 있습니다.

공통 노드가있는 경우, 노드 반환 웁니다.

샘플은
다음과 같이 두 개의리스트 주어 :
A : A1 A2 →

C1 C2 → C3 →

B : → B1 → B2 B3

제 1 공통 출력 노드 C1

생각 :
A + C 형의 체인 길이 가정
의 쇄 길이를 두 B + C
가정한다는> = B, 길이의 공개 부분을 표현 하였다.

방법 하나 :하자 긴 목록 a를 이동 - B 단계 후, 마지막 만남 갈
2 : 두 목록으로 이동 목록이 목록에 갔다 엔드에 시작하는 점은 목록이 끝 연결리스트에 갔다 시작 지점. 집적 스텝 수 (A)의 교차 지점에 도달 제 + B + C, 결국 교착 제 점에서 만날 것이다.

class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        ListNode* p1 = headA;
        ListNode* p2 = headB;
        while(p1 != p2) {
            if(p1) p1 = p1 -> next;
            else p1 = headB;
            if(p2) p2 = p2 -> next;
            else p2 = headA;
        }
        return p1;
    }
};
게시 된 843 개 원래 기사 · 원 찬양 28 ·은 40000 +를 볼

추천

출처blog.csdn.net/tomjobs/article/details/104978999