import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
public ListNode reverseBetween (ListNode head, int m, int n) {
// 添加表头
ListNode root = new ListNode(-1);
root.next = head;
// 局部链表的开始节点
ListNode begin = root;
// 局部链表的结束节点
ListNode end = root;
// 局部链表左边的节点
ListNode left = null;
// 局部链表右边的节点
ListNode right = null;
// 依次寻找局部链表的四个节点
for(int i = 0; i < m; i ++) {
left = begin;
begin = begin.next;
}
for(int i = 0; i < n; i ++) {
end = end.next;
right = end.next;
}
// 断开连接
left.next = null;
end.next = null;
// 反转局部链表
reverseList(begin);
// 连接反转后的链表
left.next = end;
begin.next = right;
// 返回结果
return root.next;
}
public ListNode reverseList(ListNode head) {
// 申请临时变量
ListNode current = head;
ListNode pre = null;
// 依次调换指针的方向
while (current != null) {
// 记录下个要处理的节点
ListNode next = current.next;
// 调换当前节点的指针方向
current.next = pre;
// 移动到下个要处理的节点
pre = current;
current = next;
}
// 返回调换后的头节点
return pre;
}
}