题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
解题
- 设定虚拟头结点简化操作
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode mPre = dummyHead;
for (int i = 0; i < m - 1; i++) {
mPre = mPre.next;
}
ListNode cur = mPre.next;
ListNode next = cur.next;
ListNode nNext = next;
for (int i = 0; i < n - m; i++) {
// 执行反转
nNext = next.next;
next.next = cur;
// 移动cur
cur = next;
next = nNext;
}
mPre.next.next = nNext;
mPre.next = cur;
return dummyHead.next;
}
}