import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
public ListNode reverseBetween (ListNode head, int m, int n) {
// write code here
if (m == n) {
return head;
}
// 计算链表的长度
if (lengthOfListNode(head) == 1) {
return head;
}
if (lengthOfListNode(head) == 2) {
return reverseList(head);
}
// 先找出要反转的链表m的前一个节点
ListNode preM = null;
ListNode mNode = null;
if (preMListNode(head, m) != null) {
preM = preMListNode(head, m);
mNode = preM.next;
} else {
//说明m=1
mNode = head;
}
ListNode aftN = null;
ListNode nNode = null;
if (nNode(head, n) != null) {
nNode = nNode(head, n);
aftN = nNode.next;
}
if (preM != null) {
preM.next = null;
}
if (nNode != null) {
nNode.next = null;
}
ListNode listNode = reverseList(mNode);
if(preM!=null){
preM.next = listNode;
}
mNode.next = aftN;
if(m==1){
return listNode;
}
return head;
}
public ListNode preMListNode (ListNode head, int m) {
int i = 1;
ListNode preM = null;
while (head != null) {
if (i == (m - 1)) {
preM = head;
break;
}
head = head.next;
i++;
}
return preM;
}
public ListNode nNode (ListNode head, int n) {
int i = 1;
ListNode nNode = null;
while (head != null) {
if (i == n) {
nNode = head;
break;
}
head = head.next;
i++;
}
return nNode;
}
public ListNode reverseList (ListNode head) {
// write code here
ListNode cur = null;
ListNode pre = head;
while (pre != null) {
ListNode next = pre.next;
pre.next = cur;
cur = pre;
pre = next;
}
return cur;
}
public int lengthOfListNode(ListNode head) {
int length = 0;
while (head != null) {
length++;
head = head.next;
}
return length;
}
}