题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ public ListNode reverseBetween (ListNode head, int m, int n) { int i=1; ListNode currNode = head; ListNode pre = head; ListNode mn_head = null; while(currNode!=null){ if(i>=m && i<=n){ ListNode afterMNode = currNode; //第n+1个节点 for (int j=0;j<n-m+1;j++){ afterMNode = afterMNode.next; } mn_head = reverseMN(currNode,n - m + 1); if(i==1){ head = mn_head; }else pre.next = mn_head; currNode.next = afterMNode; break; }else { pre = currNode; currNode = currNode.next; i++; } } return head; } public ListNode reverseMN(ListNode currNode,int n){ if (n==1){ return currNode; } ListNode new_head = reverseMN(currNode.next,--n); currNode.next.next = currNode; currNode.next = null; return new_head; } } 分三段处理 0~m-1 m~n n+1~最后