연결 목록 인터뷰 작업 단순화

leetcode task 중 하나를 해결하는 동안 많은 장소에 유사한 작업이 많다는 아이디어를 얻었습니다. 모두 매우 유사하지만 많은 코드 작성과 정밀한 테스트가 필요합니다.

그래서 추가 작업 해결을 단순화하기 위해 연결 목록에서 인기 있는 방법을 구현하고 모든 유형의 노드 구현을 허용하는 JavaScript 코드를 만들었습니다.

입어봤습니다my github

이제 이 추상화 해결remove-linked-list-elements 작업을 사용하면 원숭이도 할 수 있습니다.

완벽한 솔루션



// [put LinkedList code here]

const removeElements = (head, val) => {
  const ll = LinkedList();
  return ll.removeItems(head, v => v === val);
};

첫 번째



노드 목록을 생성하는 함수를 전달하여 인스턴스 생성linkedList
/*
 * function ListNode(val = 0, next = null) {
 *   return { val, next };
 * }
 */

const linkedList = LinkedList((value, next) => {
  return new ListNode(value, next);
});

제 경우에는 기본적으로 LeetCode Linked Node 생성자와 정확히 일치하기 때문에 이 함수를 전달할 필요가 없습니다.


removeItems 메서드를 호출하고 이 목록의 헤드를 반환합니다.

return linkedList.removeItems(head, v => v === val);

이 LeetCode 작업에서는 기존 목록을 배열로 변환하고 필터링한 다음 다시 목록으로 변환할 수 없습니다. 이 작업은 참조도 확인하므로 이러한 종류의 코드를 제출하려고 하면 통과하지 않아야 합니다.

const removeElements = (head, val) => {
    const ll = LinkedList();
    return ll.array2list(
        ll.list2array().filter(v => v === val)
    );
};

이제 이러한 유형의 작업을 해결하는 것은 매우 쉽습니다.

중복 작업 삭제



deleting duplicates in sorted list인 다른 작업을 해결해 보겠습니다.

이 목록은 정렬되어 있으므로 중복 항목이 나란히 표시되므로 현재 값을 마지막으로 본 값과 비교하고 변경되면 업데이트하는 간단한 코드를 작성할 수 있습니다.

const deleteDuplicates = head => {
    let lastVal;
    return LinkedList().removeItems(head, val => {
        if (val === lastVal) return true;
        lastVal = val;
        return false;
    });
};

매우 간단한 코드. 이 완전한 솔루션을 작성하는 데 60초도 채 걸리지 않았습니다.

운동장



여기에서 이 코드로 약간의 플레이를 할 수 있습니다.
instacode.dev playground

좋은 웹페이지 즐겨찾기