[파이썬 알고리즘 인터뷰] 15번 : 역순 연결 리스트

Dong·2022년 9월 22일

알고리즘

목록 보기
4/6

문제

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

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

연결 리스트를 뒤집어라

Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]

풀이

내 풀이

이전 노드, 현재 노드, 다음 노드 변수를 선언해서 연결 리스트를 뒤집었다.
-> 81 ms...

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

        before_head = None
        trav_head = head
        after_head = head.next

        while not trav_head:
            trav_head.next = before_head
            before_head = trav_head
            trav_head, after_head = after_head, after_head.next

        
        return before_head

책 풀이

재귀 구조로 뒤집기

->81 ms

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[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)

반복 구조로 뒤집기

->80 ms

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

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

        return prev

내가 햇던 코드랑 비슷한데 훨씬 간결하게 잘 표현했다...

profile
Hello ~

0개의 댓글