박종훈 기술블로그

(Leetcode) 206 - Reverse Linked List

New Year Gift - Curated List of Top 75 LeetCode Questions to Save Your Time

위 링크에 있는 추천 문제들을 시간이 있을때마다 풀어보려고 한다.


https://leetcode.com/problems/reverse-linked-list/

Linked List 관련 문제이다.

크게 어려운 문제는 아니여서 한번에 통과했다.

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        reversed = None
        stack = []

        current = head

        while current is not None:
            stack.append(current)
            current = current.next

        if len(stack) == 0:
            return None

        reversed = stack.pop()

        current = reversed

        while stack and stack[-1] is not None:
            current.next = stack.pop()
            current = current.next

        current.next = None

        return reversed

객체 값 비교하기

참고한 글 : Compare object instances for equality by their attributes

example1 = Solution()
example_result1 = example1.reverseList(ListNode(val=1, next=ListNode(
    val=2, next=ListNode(val=3, next=ListNode(val=4, next=ListNode(val=5))))))
assert example_result1 == ListNode(val=5, next=ListNode(
    val=4, next=ListNode(val=3, next=ListNode(val=2, next=ListNode(val=1)))))

객체간의 비교라서 이렇게 작성하면 테스트에 실패하게 된다.

방법1 __eq__ 구현

정석적인 방법이지만 번거로워서 이 방법은 스킵했다.

방법2 pickle 사용해서 구현

import pickle

assert pickle.dumps(example_result1) == pickle.dumps(ListNode(val=5, next=ListNode(
    val=4, next=ListNode(val=3, next=ListNode(val=2, next=ListNode(val=1))))))