[LeetCode] 876. Middle of the Linked List, Easy

2025. 2. 21. 12:19·CodingTest/LeetCode
반응형

1. 문제

  • 단일 연결 리스트 head가 주어질 때, 연결 리스트의 중간 노드를 반환하라.
  • 만약, 중간 노드가 2개(전체 길이가 짝수인 경우) 2번 째 노드를 반환하라.

2. 해결

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function middleNode(head: ListNode | null): ListNode | null {
    let fastPoint = head;
    let slowPoint = head;

    while(fastPoint && fastPoint.next) { // fastPointer가 null이 아니고, 마지막 노드가 아니라면 반복
        fastPoint = fastPoint.next.next;
        slowPoint = slowPoint.next;
    }

    return slowPoint;
};
  • 문제를 처음보고 떠오른 해결 방법은 전체 길이 / 2 +1 을 활용하는 방법이었다. 근데, 이렇게 하면 시간 복잡도가 O(n^2) 가 나올 거 같애서 다른 방법이 없나 고민해봤다.
  • 배열을 이용해서 각 노드의 인덱스를 기록하는 방법을 응용해볼까 했지만, 이것도 뭔가 맘에 안들었다. 배열을 한 개 더 선언하는 거기도 하고..
  • Floyd's Tortoise & Hare Algorithm 이라고 토끼 거북이 알고리즘? 이라는 게 있더라. 처음 보는 거기도 하고 학습 겸 사용해봤다.
  • 원리는 2개의 포인터를 사용해서 한 개는 1칸씩 이동하고, 나머지 한 개는 2칸씩 이동하게한다. 2칸 씩 이동하는 포인터가 null이 되거나 다음 노드가 없으면 1칸 씩 이동하던 포인터가 가리키는 노드가 중간 노드가 된다.
  • 5개의 노드가 있는 경우,
Slow Pointer Fast Pointer
1 1
Fast Pointer가 있고 Fast Pointer 다음 노드가 있으니까
2 3
Fast Pointer가 있고 Fast Pointer 다음 노드가 있으니까
3 5
Fast Pointer가 있지만, Fast Pointer 다음 노드가 없으므로 종료
  • 6개의 노드가 있는 경우,
Slow Pointer Fast Pointer
1 1
Fast Pointer가 있고 Fast Pointer 다음 노드가 있으니까
2 3
Fast Pointer가 있고 Fast Pointer 다음 노드가 있으니까
3 5
Fast Pointer가 있고 Fast Pointer 다음 노드가 있으니까
4 null
Fast Pointer가 없으므로 종료  

 

저작자표시 (새창열림)
'CodingTest/LeetCode' 카테고리의 다른 글
  • [LeetCode] 485. Max Consecutive Ones, Easy
  • [LeetCode] 383. Ransom Note, Easy
  • [LeetCode] 1342. Number of Steps to Reduce a Number to Zero, Easy
  • [LeetCode] 412. Fizz Buzz, Easy
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    leetcode 2236
    백준7576
    boj1427
    백준1427
    Java
    TypeScript
    meidum
    medium
    백준7576자바
    next 14
    백준2751
    Easy
    BOJ
    백준
    boj2108
    프로그래머스
    알고리즘
    component-scan
    백준1260
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[LeetCode] 876. Middle of the Linked List, Easy
상단으로

티스토리툴바