public class ReverseLinkedListII {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode reverseBetween(ListNode head, int m, int n) {
int chang_len=n-m+1; //计算需要逆置的节点个数
ListNode pre_head=null; //初始化开始节点的前驱节点
ListNode result=head; //最终转换后的头结点,非特殊情况几位head
while(head!=null && --m>0){
pre_head=head; //将1保存到pre_head
head=head.next; //讲head前移m-1个位置 2-1 移动一个位置 //移动到2处
}
ListNode modify_list_tai=head; //把2存储起来
ListNode new_head=null; //新链表
while(head!=null&&chang_len>0){
ListNode next=head.next;//3 //这是把4给存储起来 //5
head.next=new_head; //讲2的下一个节点指向new_head //将3的下一个节点指向2 //4-3
new_head=head;//2 //讲new_head指针指向3 //4
head=next;//3 //将head指针指向4 //5
chang_len--;
}
modify_list_tai.next=head; //2的下一个节点指向5
if(pre_head!=null){ //prehead不空,说明不是从第一个节点开始逆置的吗m>1
pre_head.next=new_head; //1指向4
}else{
result=new_head;
}
return result;
}
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode reverseBetween(ListNode head, int m, int n) {
int chang_len=n-m+1; //计算需要逆置的节点个数
ListNode pre_head=null; //初始化开始节点的前驱节点
ListNode result=head; //最终转换后的头结点,非特殊情况几位head
while(head!=null && --m>0){
pre_head=head; //将1保存到pre_head
head=head.next; //讲head前移m-1个位置 2-1 移动一个位置 //移动到2处
}
ListNode modify_list_tai=head; //把2存储起来
ListNode new_head=null; //新链表
while(head!=null&&chang_len>0){
ListNode next=head.next;//3 //这是把4给存储起来 //5
head.next=new_head; //讲2的下一个节点指向new_head //将3的下一个节点指向2 //4-3
new_head=head;//2 //讲new_head指针指向3 //4
head=next;//3 //将head指针指向4 //5
chang_len--;
}
modify_list_tai.next=head; //2的下一个节点指向5
if(pre_head!=null){ //prehead不空,说明不是从第一个节点开始逆置的吗m>1
pre_head.next=new_head; //1指向4
}else{
result=new_head;
}
return result;
}
}