Linked list의 head가 주어질때 뒤에서부터 n번째의 노드를 linked list에서 지워하 하는 문제이다.
문제는 간단하니 바로 예시로 넘어가보자.
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]
위와 같은 linked list가 주어졌을때 n이 2이므로 뒤에서부터 두번째인 노드를 지우면 된다.
따라서 4를 가지고 있는 노드를 삭제하고 head를 return하면 linked list는 1 -> 2 -> 3-> 5가 된다.
나는 다음과 같이 풀었다.
1. linked list의 길이를 알아낸다. (처음부터 끝까지 한번 순회 함으로써)
2. 지워야 하는 노드 앞으로 간다.
3. 2번 스텝에서 next를 next.next로 바꾸어 준다.
코드를 작성하면 다음과 같다:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
sz = 0
current = head
while current is not None:
current = current.next
sz += 1
del_from_front = sz - n
current = head
if n == sz:
return head.next
for i in range(del_from_front - 1):
current = current.next
current.next = current.next.next
return head
풀이 영상: https://youtu.be/-2-INiOg2mY