题解 | #链表内指定区间反转# 凑活看吧
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
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) {
if(m==1&&n==1){
return head;
}
// 找到m前一个位置处的节点
ListNode mPre = head;
//找到m前一个节点的位置
for(int i = 0; i < m-2; i++){
mPre = mPre.next;
}
//找到mnode
ListNode mNode = null;
if(m == 1){
mNode = head;
}else{
mNode = mPre.next;
}
ListNode mNodeTmp = mNode;
// 把m---n之间的反转
ListNode pre = null; // pre是最后n的节点所在的位置
ListNode next = null; // next是n节点后面一个节点的位置
for(int j = 0; j <= n-m; j++){
next = mNodeTmp.next;
mNodeTmp.next = pre;
pre = mNodeTmp;
mNodeTmp = next;
}
if( m==1 ) {
// 原来的首节点指向n节点的后一个节点
mNode.next = next;
//现在头结点变了
return pre;
}else {
//处理开头结尾两个节点的指向
mPre.next = pre;
//开头m所对应的的节点指向next
mNode.next = next;
//此时头节点还是原来那个
return head;
}
}
}
#算法题#
智元机器人成长空间 174人发布