LeetCode 75: 2095. Delete the Middle Node of a Linked List

김준수·2024년 3월 21일
0

LeetCode 75

목록 보기
29/63
post-custom-banner

leetcode link

Description

You are given the head of a linked list. Delete the middle node, and return the head of the modified linked list.

The middle node of a linked list of size n is the ⌊n / 2⌋th node from the start using 0-based indexing, where ⌊x⌋ denotes the largest integer less than or equal to x.

For n = 1, 2, 3, 4, and 5, the middle nodes are 0, 1, 1, 2, and 2, respectively.


연결 리스트의 head가 주어집니다. 중간 노드삭제하고 수정된 연결 리스트의 head를 반환합니다.

인덱스가 0부터 시작하는 연결 리스트의 크기가 n일떄 중간 노드⌊n / 2⌋번째 노드입니다. 여기서 ⌊x⌋x 이하의 가장 큰 정수를 나타냅니다.

n = 1, 2, 3, 4, 5에 대해, 각 중간 노드는 0, 1, 1, 2, 2입니다.

예시1:

입력: head = [1,3,4,7,1,2,6]
출력: [1,3,4,1,2,6]
설명:
n = 7이므로, 값이 7인 노드 3이 중간 노드로 표시되어 있습니다.
이 노드를 제거한 후 새 리스트를 반환합니다.

예시2:

입력: head = [1,2,3,4]
출력: [1,2,4]
설명:
n = 4이므로, 값이 3인 노드 2가 중간 노드로 표시되어 있습니다.

예시3:

입력: head = [2,1]
출력: [2]
설명:
n = 2이므로, 값이 1인 노드 1이 중간 노드로 표시되어 있습니다.
노드 1을 제거한 후 값이 2인 유일한 노드가 남습니다.

제약 조건:

  • 리스트의 노드 수는 [1, 10^5] 범위 내에 있습니다.
  • 1 <= Node.val <= 10^5

Solution


/*
class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
*/

class Solution {
    public ListNode deleteMiddle(ListNode head) {
        if (head.next == null) {
            return null;
        }

        ListNode originalHead = head;
        ListNode middleLeft = new ListNode(0, head);
        head = head.next;
        int n = 2;
        while (head != null) {
            if (n % 2 == 0) {
                middleLeft = middleLeft.next;
            }
            head = head.next;
            n++;
        }

        middleLeft.next = middleLeft.next.next;
        return originalHead;
    }
}

post-custom-banner

0개의 댓글