Remove Nth Node From End of List

박수빈·2022년 2월 26일
0

leetcode

목록 보기
31/51

문제

  • 연결리스트의 head가 주어짐
  • 뒤에서부터 n 번째를 지워라

풀이

  • 뒤부터니까, recursion으로 끝까지 들어간 후에
  • 세면서 나오다가, 없애야할 순서가 오면 return을 node.next로 해주기
  • return 받는거 next에 연결하도록
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        global count
        count = 0 
        return recursion(head, n)
        
        
def recursion(thisNode,n):
    global count
    if thisNode.next is None:
        # 꼬리
        count += 1
        if count == n:
            return thisNode.next # 꼬리가 삭제되는 경우
        return thisNode
        
    nextNode = recursion(thisNode.next,n) # 바뀐게 return 될 경우
    # 꼬리에 닿고 나서 오는 부분
    count += 1
    if count < n:
        return thisNode
    elif count == n:
        return thisNode.next # 이번 노드 삭제
    elif count == n+1:
        thisNode.next = nextNode # 이전 노드가 삭제된 경우
        return thisNode
    else:
        return thisNode

결과

profile
개발자가 되고 싶은 학부생의 꼼지락 기록

0개의 댓글