Algorithm

LeetCode) Reverse Linked List II

주코식딩 2022. 5. 16. 07:06

토요일에 배웠던 Linked List가 어려워서 관련 문제를 하나 풀어보았다.

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

 

Reverse Linked List II - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

위 그림을 예제로 개념을 설명하겠다.

1. 2번부터 4번까지 순서를 바꿔준다.

2. 1 ->4, 2->5로 가리키는 주소를 바꿔준다

 

어렵지 않게 풀지 알았는데 구현하는데에 1시간 정도 걸려서 문제를 풀었다.

파이참의 디버그를 적극적으로 활용해 하나씩 조건을 추가하다 보니 코드가 길어졌다.

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

class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:

        if left == right:
            return head

        node, prev = head, None

        cnt = 1
        flag = 0
        while node:
            if cnt == left:
                flag = 1
                temp_node = prev

            if flag == 1:
                next, node.next = node.next, prev
                prev, node = node, next
            else:
                prev, node = node, node.next

            if cnt == right:
                flag = 0
                if temp_node:
                    temp_node.next = prev

                    for i in range(right-left+1):
                        temp_node = temp_node.next

                    temp_node.next = next
                elif not temp_node and not node :
                    head = prev
                else:
                    head = prev
                    t1 = prev
                    while t1.next:
                        t1 = t1.next
                    t1.next = node
                    break
            cnt += 1
        return head

'Algorithm' 카테고리의 다른 글

LeetCode) mergeKLists  (0) 2022.05.17
LeetCode) removeDuplicateLetters  (0) 2022.05.16
백준) 괄호  (0) 2022.05.15
LeetCode) 21. Merge Two Sorted Lists  (0) 2022.05.14
LeetCode) 배열 파티션  (0) 2022.05.13