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

Dong·2022년 9월 30일

문제

https://leetcode.com/problems/reverse-linked-list-ii/
인덱스 m에서 n까지를 역순으로 만들어라. 인덱스 m은 1부터 시작한다

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

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

Input: head = [5], left = 1, right = 1
Output: [5]

풀이

내풀이

한번에 맞게 풀었지만 깔끔하지 못하고 그냥 주먹구구식으로 풀어서 너무 아쉽다...
그냥 count 변수를 추가해서 n, m일때 연결리스트를 뒤집어 주었는데
뒤집어 줄때 n==m인경우, n=1경우를 하드코딩해서 깔끔하지 않은것 같다.

class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
        prev_head, trav = None, head
        count = 1

        while count != left:
            count += 1
            prev_head, trav = trav, trav.next

        reverse_end = prev = trav

        # reverse
        if trav.next:
            prev, trav = trav, trav.next
            count += 1

        while count != right+1:
            count += 1
            next, trav.next = trav.next, prev
            prev, trav = trav, next

        if prev_head:
            prev_head.next = prev
        reverse_end.next = trav

        if left == 1:
            return prev
        else:
            return head

책 풀이

profile
Hello ~

0개의 댓글