题解 | 链表内指定区间反转
链表内指定区间反转
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) { // write code here ListNode pre = null, cur = head; // 找到要翻转的开始位置 for (int i = 0; i < m - 1; i++) { pre = cur; cur = cur.next; } // 如果n大于m,那么才需要翻转,并调用翻转前k位的方法 if (n > m) { ListNode node = reverseK(cur, n - m + 1); // !!! 边界判断 if (pre == null) return node; pre.next = node; } return head; } private ListNode reverseK(ListNode head, int k) { ListNode hair = null, cur = head, next; while (k-- > 0) { next = cur.next; cur.next = hair; hair = cur; cur = next; } head.next = cur; return hair; } }
线性表基础 文章被收录于专栏
链表、递归、栈