본문 바로가기

프로그래머/Python

[Python] Leet Code 206. Reverse Linked List

본 내용은 <파이썬 알고리즘 인터뷰>를 참고했습니다.

재귀 구조로 뒤집기

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:

        def reverse(node: ListNode, prev: ListNode = None):
            if not node:
                return prev
            next, node.next = node.next, prev
            return reverse(next, node)

        return reverse(head)

이 문제에서 배워야 할 포인트

  • 반복 구조에서 'prev, node = node, next' 부분을 재귀 함수 'return reverse(next, node)'로 대체
  • return reverse(head)로 시작하므로, prev의 초깃값을 None으로 둠

반복 구조로 뒤집기

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:

        node, prev = head, None

        while node:
            next, node.next = node.next, prev
            prev, node = node, next

        return prev

이 문제에서 배워야 할 포인트

  • 'next, node.next = node.next, prev', 'prev, node = node, next'
    • 연쇄구조
    • node.next, node를 주목
  • node, prev 변수를 먼저 정의하고 시작
    • node는 포인터 역할