题解 | #链表内指定区间反转#
链表内指定区间反转
http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/*
* 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 cur = head; // 当前节点
ListNode pre = null; // 当前节点的前一个节点
ListNode mNode = null; // 第m个节点
ListNode mPreNode = null; // 第m-1个节点
int i = 1;
while(cur!=null){
ListNode next = cur.next;
if(i==m){ // 当前节点是第m个节点
mPreNode = pre;
mNode = cur;
}
if(i>=m && i <= n) { // 第m~n个节点
cur.next = pre; // 前后反转
}
if(i==n){ // 第n个节点
mNode.next = next; // m.next = n.next
if(mPreNode!=null) { // m上一个节点不为空
mPreNode.next = cur; // m上个节点.next = n
} else { // m上个节点是空,说明从第一个节点就开始反转
head = cur; // 更改头节点
}
}
pre = cur;
cur = next;
i++;
}
return head;
}
}