反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
1 class Solution97 {
2
3 public ListNode reverseBetween(ListNode head, int m, int n) {
4 if (head == null || head.next == null || m >= n) {
5 return head;
6 }
7
8 ListNode dummyHead = new ListNode(0);
9 dummyHead.next = head;
10 ListNode pre = dummyHead;
11 ListNode left = dummyHead.next;
12 ListNode right = dummyHead.next;
13
14 for (int i = 0; i < n - m; i++) {
15 right = right.next;
16 }
17 for (int i = 0; i < m - 1; i++) {
18 pre = left;
19 left = left.next;
20 right = right.next;
21 }
22 for (int i = 0; i < n - m; i++) {
23 pre.next = left.next;
24 left.next = right.next;
25 right.next = left;
26 left = pre.next;
27 }
28
29 return dummyHead.next;
30 }
31 }
原文:https://www.cnblogs.com/rainbow-/p/10348977.html