92. Reverse Linked List II Python3

Yelim Kim·2021년 10월 1일
0

Python Algorithm Interview

목록 보기
19/36
post-thumbnail

Problem

Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list.

Example 1:

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

Example 2:

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

Constraints:

The number of nodes in the list is n.
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n

My code

class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
        
        if not head or left == right:
            return head
        
        dummy = ListNode(0)
        dummy.next = head
        
        prev, cur = dummy, head
        for _ in range(left - 1):
            prev, cur = prev.next, cur.next 
        
        for _ in range(right - left):
            tmp = prev.next             
            prev.next = cur.next        #conect 1->3 i.e. move 3 to head of sublist
            cur.next = cur.next.next    #connect 2->4, 
            prev.next.next = tmp        #connect 3->2
        return dummy.next   #cannot return head if left = 1

Review

[실행 결과]
Runtime: 20 ms Memory Usage: 14.5 MB

[접근법]
이전에 풀었던 역순을 해당 range안에서 반복하며 접근

[느낀점]
... 연결 리스트가 싫어지는 순간이었다.....
답지를 안 볼 수가 없는 문제... 도대체 내 머리에선 왜 이런 생각이 떠오르지 않을까...?

profile
뜬금없지만 세계여행이 꿈입니다.

0개의 댓글