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입니다.
입력: head = [1,3,4,7,1,2,6]
출력: [1,3,4,1,2,6]
설명:
n = 7이므로, 값이 7인 노드 3이 중간 노드로 표시되어 있습니다.
이 노드를 제거한 후 새 리스트를 반환합니다.
입력: head = [1,2,3,4]
출력: [1,2,4]
설명:
n = 4이므로, 값이 3인 노드 2가 중간 노드로 표시되어 있습니다.
입력: head = [2,1]
출력: [2]
설명:
n = 2이므로, 값이 1인 노드 1이 중간 노드로 표시되어 있습니다.
노드 1을 제거한 후 값이 2인 유일한 노드가 남습니다.
/*
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;
}
}