92. Reverse Linked List II

kukudas·2022년 3월 14일
0

Algorithm

목록 보기
17/46
# 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: Optional[ListNode], m, n) -> Optional[ListNode]:
        root = start = ListNode(None)
        root.next = head

        # 시작점이랑 뒤집어졌을때 마지막에 가는 노드 구해줌
        for _ in range(m - 1):
            start = start.next
        end = start.next
        
        # 뒤집어줌.
        # 1-2-3-4-5 에서 2-3-4를 뒤집는다고하면
        # 마지막이 되는 2인 end랑 뒤집기 전 시작점인 1은 고정이고
        # tmp로 start의 바로 다음 값인데 이 값은 매 반복마다 뒤집기가 시작되는 값임.
        # tmp 없이 했을때
        # 맨 처음에 start 는 1-3-4-5고 end는 2-4-5 그리고 tmp는 2-4-5임
        # end값은 전부 뒤집었을때 맨뒤로 가는 끝값 역할이고, 하나씩 뒤로 가면서 다음 값을 끌어오는 역할임
        # 따라서 tmp를 사용해서 뒤집은거를 start에 연결해줘야함
        for _ in range(n - m):
            tmp, start.next, end.next = start.next, end.next, end.next.next
            start.next.next = tmp
            

        return root.next

[문제]
https://leetcode.com/problems/reverse-linked-list-ii/submissions/

0개의 댓글