넘치게 채우기

[LeetCode] 876. Middle of the Linked List 본문

PS/LeetCode

[LeetCode] 876. Middle of the Linked List

riveroverflow 2024. 3. 7. 12:53
728x90
반응형

https://leetcode.com/problems/middle-of-the-linked-list/description/

Leetcode - Middle of the Linked List

문제 유형 : 연결리스트, 투포인터

문제 난이도 : Easy

 

문제

Given the head of a singly linked list, return the middle node of the linked list.

If there are two middle nodes, return the second middle node.

 

단순 연결리스트의 헤드가 주어진다. 중간 노드를 반환하라.

두 개의 중앙 노드가 있다면, 두 번째 중앙 노드를 반환하라.

 

풀이

투 포인터를 이용해서 풀어주면 된다.

두 칸씩 이동하는 fast

한 칸씩 이동하는 slow를 만든다.

fast가 맨 끝, 또는 맨 끝으로부터 한칸 전에 도착하면, slow를 반환한다.

 

코드

C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* middleNode(ListNode* head) {
        auto fast = head;
        auto slow = head;

        while(fast != NULL && fast -> next != NULL) {
            fast = fast -> next -> next;
            slow = slow -> next;
        }

        return slow;
    }
};
 
728x90
반응형