题解 | #链表内指定区间反转#
链表内指定区间反转
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) { // write code here int i = 1; ListNode cur = head; ListNode beforeNode = null; while (i < m) { if (i == m - 1) { // 找到开始反转的前一个节点 beforeNode = cur; } cur = cur.next; i++; } ListNode pre = null; //从指定部分反转 while (i <= n) { ListNode next = cur.next; cur.next = pre; pre = cur; cur = next; i++; } if (beforeNode != null) { //没有从头开始开始前一个节点拼接pre beforeNode.next = pre; } else { //从头开始反转,head 就是pre head = pre; } ListNode newNode = pre; //从开始反转位置遍历,遇到下一个节点是空,直接拼接后缀部分 while (newNode.next != null) { newNode = newNode.next; } newNode.next = cur; return head; } }