import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
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
// 通过构建一个虚拟头结点,消除了对头结点复杂的分类考虑
int counter=0;
ListNode virtual=new ListNode(-1);
virtual.next=head;
ListNode p=null,pnext=virtual,temp;
ListNode firstpre=null,first=null,last=null,lastnext=null;
while(pnext!=null){
if(counter==m-1){
firstpre=pnext;
first=pnext.next;
}
if(counter==n){
last=pnext;
lastnext=pnext.next;
}
if(counter>=m&&counter<=n){
temp=pnext.next;
pnext.next=p;
p=pnext;
pnext=temp;
counter++;
continue;
}
counter++;
temp=pnext.next;
p=pnext;
pnext=temp;
}
firstpre.next=last;
first.next=lastnext;
return virtual.next;//这一步非常精髓,我之前返回了head,但是这样有部分情况不适用
}
}
【牛客网TOP101】BM2 链表内指定区间反转
最新推荐文章于 2024-07-29 14:22:26 发布