题解 | #链表内指定区间反转# 凑活看吧
链表内指定区间反转
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; } } }
#算法题#