题解 | #链表内指定区间反转#
链表内指定区间反转
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) { ListNode node = head; //倒序链表 ListNode pre = null; //顺序链表 ListNode next = null; //顺序链表的指针 ListNode nextIndex = null; int i = 1; while (node != null) { head = node; ListNode newNode = node.next; if (i >= m && i <= n) { //在范围内使用倒序指针 node.next = pre; pre = node; if (i == n ) { //当指针到倒序最后的索引时,把顺序链表和倒序链表合并 if (next == null) { next = pre; nextIndex = next; }else{ nextIndex.next = pre; } } } else { //范围外的顺序链表 node.next = null; if (next == null) { next = node; nextIndex = next; } else { //顺序链表的指针永远指向顺序链表的最后一位 while (nextIndex.next != null) { nextIndex = nextIndex.next; } nextIndex.next = node; nextIndex = nextIndex.next; } } node = newNode; i++; } return next; } }