19. Remove Nth Node From End of List

꼬부기·2023년 1월 6일
0

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

profile
꼬북꼬북한개발자입니다.

0개의 댓글