Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 연결 목록의 중간 노드 찾기

<시간/>

문제

연결 리스트의 헤드를 첫 번째이자 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

우리 함수는 목록의 가장 중간 노드에 저장된 값을 반환해야 합니다. 그리고 가장 중간에 두 개의 노드가 있으면 그 중 두 번째 노드를 반환해야 합니다.

예를 들어 목록이 다음과 같은 경우:

입력

[4, 6, 8, 9, 1]

출력

const output = 8;

다음은 코드입니다:

예시

class Node {
   constructor(data) {
      this.data = data;
      this.next = null;
   };
};
class LinkedList {
   constructor() {
      this.head = null;
      this.size = 0;
   };
};
LinkedList.prototype.add = function(data) {
   const newNode = new Node(data);
   let curr;
      if(this.head === null) {
         this.head = newNode;
      } else {
         curr = this.head;
         while(curr.next) {
            curr = curr.next;
      }
      curr.next = newNode;
   };
      this.size++;
};
const list = new LinkedList();
list.add(4);
list.add(6);
list.add(8);
list.add(9);
list.add(1);
const findMiddle = (head) => {
   let slow = head
   let fast = head
   while(fast && fast.next) {
      slow = slow.next
      fast = fast.next.next
   }
   return slow.data
};
console.log(findMiddle(list.head));

출력

8