[题目]
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转,
说明1 ≤ m ≤ n ≤ 链表长度。
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
【代码】
public ListNode reverseBetween(ListNode head, int m, int n) {
int len = 0;
ListNode node1 = head;
ListNode fPre = null;
ListNode tPos = null;
while(node1 != null){
len ++;
fPre = len == m - 1 ? node1 :fPre;
tPos = len == n + 1 ? node1 : tPos;
node1 = node1.next;
}
if(m < 0 || m > n || n > len){
return head;
}
if(fPre != null){
node1 = fPre.next;
}else{
node1 = head;
}
ListNode node2 = node1.next;
node1.next = tPos;
ListNode next = null;
while(node2 != tPos){
next = node2.next;
node2.next = node1;
node1 = node2;
node2 = next;
}
if(fPre != null){
fPre.next = node1;
return head;
}
return node1;
}