给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
思路:通过计数来找到需要反转的链表左右两侧的节点,反转所需区间,再连接头尾便可
只不过处理首位的时候需要考虑特殊情况
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode node1=new ListNode(),
node2=new ListNode(),
node3=new ListNode(),
temp=head;
int i=1;
while(temp!=null){
if(left==i) node3=temp;
if(i==left-1){
node1=temp;
if(node1.next!=null) node3=node1.next;
}
if(i==right){
if(temp.next!=null) node2=temp.next;
else node2=null;
break;
}
temp=temp.next;
i++;
}
temp=node3;
ListNode node4=new ListNode();
node4.next=node2;
for(i=left;i<=right;i++){
temp=temp.next;
node3.next=node4.next;
node4.next=node3;
node3=temp;
}
node1.next=node4.next;
return left!=1?head:node4.next;
}
}