[Leetcode] 19. Remove Nth Node From End of List
링크드 리스트의 끝에서 n
번째 노드를 제거하는 문제다.
예를들어 [1, 2, 3, 4, 5]가 주어지고 n
이 2인 경우, 끝에서 2번째 노드인 4를 제거한 [1, 2, 3, 5]를 반환하면 된다.
투포인터
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
left, right = head, head
for i in range(n):
right = right.next
if not right:
return left.next
while right.next:
left = left.next
right = right.next
left.next = left.next.next
return head
left
, head로부터 n
칸 뒤 노드를 가리키는 right
를 이용해 탐색한다.right
이 None
인 경우 left
값을 제거한다는 뜻이므로 left.next
를 반환한다.right
가 리스트의 끝에 도달할 때 까지 두 포인터를 이동시킨다.right
가 리스트의 끝에 도달했으면 right
값이 끝에서 1번째라는 의미이므로 right
의 n-1
만큼 앞에 있는 노드를 제거한다.right
- left
= nright
- (n-1) = left
+ 1left.next
값이므로 left.next
값을 left.next.next
로 업데이트한다.