题解 | #链表内指定区间反转#
链表内指定区间反转
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 nodeBeforeM = null; ListNode nodeM = null; ListNode nodeN = null; ListNode nodeAfterN = null; ListNode cursor = head; ListNode pre = null; if (m == n) { return head; } if (m > n) {//illegal return null; } int i = 1; while (cursor != null) { if (i == (m - 1)) { //when m>1, nodeBeforeM not null, otherwise nodeBeforeM=null nodeBeforeM = cursor; } if (i >= m && i <= n) { ListNode newNode = new ListNode(cursor.val); if (i == m) { nodeM = newNode; } if (i == n) { nodeN = newNode; } newNode.next = pre; pre = newNode;//will use in next round } if (i == n && cursor.next == null) { if (nodeBeforeM != null) { nodeBeforeM.next = nodeN; break; } else { return nodeN; } } if (i > n) { nodeM.next = cursor; if (nodeBeforeM != null) { nodeBeforeM.next = nodeN; break; } else { return nodeN; } } cursor = cursor.next; i++; } return head; } }
主要就是注意边界的情况,要考虑完整。