Reverse Linked List II
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 <= 5001 <= left <= right <= n
Follow up: Could you do it in one pass?
アプローチ
思考
- left, right 間の linked list を反転させる
- left - 1 の node の next pointer を right に持っていく
- left pointer を right.next に持っていく
- left - right を reverse する
実装
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
cur = head
for _ in range(l - 1):
def reverse(head, l, r):
cur = head
while l < r:
tmp = cur.next
cur.next = prev
prev = cur
cur = tmp
return headTime Space
注意点
- 範囲内の reverse の箇所で詰まる