描述
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。
题目解法:就是链表的处理转换,记得要考虑各种各样的情况,用极端值进行设计
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==1&&n==1) return head;
ListNode head_node=null;
ListNode tail_node=null;
ListNode node=head;
for(int i=1;i<n+2&&node!=null;i++)
{
if(i==m-1) head_node=node;
if(i==n+1) tail_node=node;
node=node.next;
}
ListNode cur,next,pre=null;
if(head_node!=null){
cur=head_node.next;
}
else{
cur=head;
}
ListNode temp=cur;
while(cur!=tail_node)
{
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
if(tail_node!=null)
temp.next=tail_node;
if(head_node!=null)
{
head_node.next=pre;
return head;
}
else{
return pre;
}
}
}