将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 𝑂(𝑛)O(n),空间复杂度 𝑂(1)O(1)。
eg:
给出的链表为 1→2→3→4→5→𝑁𝑈𝐿𝐿, 𝑚=2,𝑛=4
返回 1→4→3→2→5→𝑁𝑈𝐿𝐿数据范围: 链表长度 0<𝑠𝑖𝑧𝑒≤1000,0<𝑚≤𝑛≤𝑠𝑖𝑧𝑒,链表中每个节点的值满足 ∣𝑣𝑎𝑙∣≤1000
要求:时间复杂度 𝑂(𝑛) ,空间复杂度 𝑂(𝑛)
进阶:时间复杂度 𝑂(𝑛),空间复杂度 𝑂(1)
public class Solution {
public ListNode reverseBetween (ListNode head, int m, int n) {
ListNode res=new ListNode(-1);
res.next=head;
ListNode pre=res;
ListNode cur=head;//当前节点
for(int i=1;i<m;i++){
pre=cur;
cur=cur.next;
}
//从m反转到n,头插法
for(int i=m;i<n;i++){
ListNode temp=cur.next;
cur.next=temp.next;
temp.next=pre.next;
pre.next=temp;
}
return res.next;
}
}