题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/*class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
export function reverseBetween(head: ListNode, m: number, n: number): ListNode {
// write code here
let pre:ListNode|null=null,next:ListNode=head.next;
let mNode:ListNode|null=null,mPreNode:ListNode|null=null;
let nNode:ListNode|null=null,nNextNode:ListNode|null=null;
let count=1;
let cHead =head
while(cHead!==null && count<=n){
if(count===m){
mNode = cHead
mPreNode=pre;
}
if(count>m){
cHead.next=pre
}
if(count ===n){
nNode =cHead
nNextNode=next;
}
pre = cHead
cHead = next;
if(cHead){
next = cHead.next
}
count++
}
if(mNode){
mNode.next = nNextNode;
}
if(mPreNode){
mPreNode.next = nNode;
}
if(m ===1){
head = nNode
}
return head
}


