92. Reverse Linked List II

https://leetcode.com/problems/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 <= 500 	
1 <= left <= right <= n

  • code
class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode cur = head, prev = null;
        while (m > 1) {
            prev = cur;
            cur = cur.next;
            m--;
            n--;
        }
        ListNode before_reversed_head = prev, tail = cur;
        
        ListNode nex = null;
        for (int i = 0; i < n; i++){
            nex = cur.next;
            cur.next = prev;
            prev = cur;
            cur = nex;
        }

        if (before_reversed_head != null) {
            before_reversed_head.next = prev;
        } else {
            head = prev;
        }

        tail.next = cur;
        return head;
    }
}