参考:力扣labuladong
`ListNode reverse(ListNode head) {
if (head.next == null) return head;
ListNode last = reverse(head.next);
head.next.next = head;
head.next = null;
return last;
}
/**
- Definition for singly-linked list.
- public class ListNode {
-
int val;
-
ListNode next;
-
ListNode() {}
-
ListNode(int val) { this.val = val; }
-
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
- }
*/
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
// 虚拟节点
ListNode preHead = new ListNode(-1);
// 虚拟节点next指向head
preHead.next = head;
ListNode pre = preHead;
// 赋值pre为left的前驱节点
for(int i = 0;i < left-1;i++){
pre = pre.next;
}
ListNode cur = pre.next; // leftHead
for (int i = 0; i < right - left; i++) { // left-2,right-4;right-left=2
// 这里的循环次数,因为我们是从左节点的下一个开始进行操作的
ListNode temp = cur.next;// 所以遍历的次数要少一次 3
cur.next = temp.next; // 2–4
temp.next = pre.next; // 3-2
pre.next = temp; // 1–3 1-3-2-4
}
return preHead.next;
}