A -> B -> C
^ ^ ^
pre cur nxt
A <- B C
^ ^ ^
pre cur nxt
A <- B <- C
^ ^ ^
pre cur nxt
三、解法
解法一
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummy = new ListNode(-1, head), p = dummy;
for (int i = 0; i < left - 1; i++) {
// 找到待交换结点的前一个结点
p = p.next;
}
ListNode pre = null, cur = p.next;
for (int i = 0; i < right - left + 1; i++) {
ListNode nxt = cur.next;
cur.next = pre;
pre = cur;
cur = nxt;
}
p.next.next = cur;
p.next = pre;
return dummy.next;
}
}