반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

멋진 개발자가 되고 싶다

[LeetCode,Python] 92. 역순 연결 리스트 2(Reverse Linked List 2) 본문

Algorithm Study/leetcode

[LeetCode,Python] 92. 역순 연결 리스트 2(Reverse Linked List 2)

오패산개구리 2021. 7. 10. 00:59
728x90
반응형

인덱스 m에서 n까지를 역순으로 만들어라.

인덱스 m은 1부터 시작한다.

 

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

Output: [1,4,3,2,5]

 

 

 

** 깔끔한 답안 **

 

1. 반복 구조로 노드 뒤집기

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseBetween(self, head: ListNode, left: int, right: int-> ListNode:
        if left == right or not head:
            return head
 
        root = start = ListNode(None)
        root.next = head
        for _ in range(left - 1):
            start = start.next
        end = start.next
 
        for _ in range(right - left):
            tmp, start.next, end.next = start.next, end.next, end.next.next
            start.next.next = tmp
        
        return root.next
cs

 

 

해설:

 

역순이 취해지는 지점 바로 전 노드를 first라 하였다.

그리고 역순이 취해지는 노드를 end라 하였다.

단순하게 말하면 ListNode 전체로 봤을 때,

end가 역순이 끝나는 지점까지 나아가면서 자리를 바꿔주도록 하였다.

 

end가 나아가면서 first의 앞 노드와 계속 자리를 바꿔준다.

따라서 first의 앞 노드를 tmp로 두고 진행하였다.

 

손으로 위 코드를 따라 진행해보길 바란다.

 

 

[출처: 파이썬 알고리즘 인터뷰(박상길 지음, 정진호 일러스트) 출판사 : 책만]

728x90
반응형