ListNode를 제 자리에서 회전시킬 수 있냐가 관건인 문제이다.
포인터 세개를 두고 다음과 같은 형식으로 Swap을 진행한다.
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function reverseBetween(head: ListNode | null, left: number, right: number): ListNode | null {
if(!head || left === right) return head
const dummyNode = new ListNode(0)
dummyNode.next = head
let prev = dummyNode
for(let i = 0; i < left - 1; i++) prev = prev.next
const start = prev.next
let then = start.next
for(let i = 0; i < right - left; i++) {
start.next = then.next
then.next = prev.next
prev.next = then
then = start.next
}
return dummyNode.next
};