# 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/