反转链表的一部分,从第m个到第n个节点反转,m、n都小于链表长度。
public void reverselist(List l,int m,int n){
//如果m和n相同,则返回原链表
if(m == n){
return l;
}
//定义一个新的临时头指针
Node tmp = Node(0);
tmp.next = l;
//移动头指针到第(m-1)个节点
Node pre = tmp;
for(int i=0; i<(m - 1); i++){
pre = pre.next;
}
Node result = null;
//将当前节点指向第m个节点
Node cur = pre.next;
Node next = Node(0);
//开始循环,反转第m到n个节点
for(int j=0; j<(n - m + 1); j++){
next = cur.next;
cur.next = result;
result = cur;
cur = next;
}
//cur已经指向第(n+1)个节点
pre.next.next = cur;
//result指向第n个节点
pre.next = result;
return tmp.next;
}