팰린드롬 연결 리스트 - I

6211 단어
접근법 1:
1) 목록의 중간까지 도달하십시오.
2) 중간에서 마지막까지 반전
3) 비교 및 ​​반환

var isPalindrome = function(head) {

    const midElementOfList = getMiddleElemnt(head);
    const reversedFromMiddleTillEnd = reverseList(midElementOfList);
    return checkIfPalindrome(head, reversedFromMiddleTillEnd);
};

var getMiddleElemnt = (head) => {
let slow = head;
let fast = head;

    while(fast && fast.next !==null && fast.next.next !== null){
        slow = slow.next;
        fast= fast.next.next;
    }
    return slow;
}
var checkIfPalindrome = (head, reverseList) =>{
    while(head!==null && reverseList !==null){
        if(head.val!== reverseList.val){
            return false;
        }
        head = head.next;
        reverseList= reverseList.next;
    }
    return true;
}

var reverseList = function(head) {

const reverseR = (head) => {
   if (head === null || head.next === null) {
    return head;
  }
   let rest_trail = reverseR(head.next);
    const nextOfHead = head.next;
    nextOfHead.next = head;
    head.next = null;
    return rest_trail;
}
return reverseR(head);   
}



접근 2:
1) 리스트 끝까지 도달하고 각 노드의 값을 배열에 저장합니다.
2) 이제 배열을 뒤집고 각 요소를 실제 배열과 비교합니다.

접근법 3:
1) 목록을 먼저 복제 - (복잡성 및 추가 작업 추가)
1) 이제 복제 목록 역방향
2) 각 요소를 실제 List와 비교합니다.

좋은 웹페이지 즐겨찾기