두 연결 목록의 교집합

6222 단어 leetcodejavascript
두 연결 목록의 교집합
접근법 1:
1) 두 목록의 길이를 얻습니다.
2) 포인터를 이동하고 길이를 줄여 여분의 노드를 건너뜁니다.
3) 이제 공통 요소를 얻을 때까지 비교하십시오.

var getIntersectionNode = function(headA, headB) {
    let m = getLength(headA);
    let n = getLength(headB);
    let a = headA, b = headB;

  while (m != n) {
    if (m > n) {
      m--;
      a = a.next;
    } else {
      n--;
      b = b.next;
    }
  }
  while (a && a != b) {
    a = a.next;
    b = b.next;
  }
  return a;
}
const getLength = function(head) {
    if (!head) {
        return 0;
    }
    let length = 0;
    let curr = head;
    while (curr.next !== null) {
        curr = curr.next;
        length++;
    }
    return length;
}



접근 2:
1) 두 개의 포인터
2) 둘 다 같지 않을 때까지 반복
3) 하나가 null이면 하나를 반환하고 다른 하나를 첫 번째와 동일하게 만듭니다.
4) 불일치할 때까지 반복

var getIntersectionNode = function(headA, headB) {

    let ptrA = headA
    let ptrB = headB

    while(ptrA != ptrB){

        if(ptrA == null){
            ptrA = headB
        }else{
            ptrA = ptrA.next
        }
        if(ptrB == null){
            ptrB = headA
        }else{
            ptrB = ptrB.next
        }   
    }
    return ptrA
};

좋은 웹페이지 즐겨찾기