https://leetcode.com/problems/reverse-linked-list-ii/
这道题跟其他reverse node 的题差不多,只要找到需要reverse的node之前的那个node,再把这个node后面的n-m+1个node掉转就行。
如果head node也需要被reverse的话,它之前没有node了,所以需要在前面加一个dummy node
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
int dif = n-m+1;
if(dif<=1) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode before = dummy;
while(m>1){
before = before.next;
m--;
}
ListNode last = before.next;
ListNode cur = before.next.next;
while(dif>1){
last.next = cur.next;
cur.next = before.next;
before.next = cur;
cur = last.next;
dif--;
}
return dummy.next;
}
}