力扣 中等 92.反转链表 II
文章目录
- 题目介绍
- 题解
题目介绍
题解
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
// 创建一个哑节点,它的 next 指向头节点,方便处理
ListNode dummy = new ListNode(0, head);
// p0 用于指向反转部分的前一个节点
ListNode p0 = dummy;
// 移动 p0 到反转部分的前一个节点
for (int i = 0; i < left - 1; i++) {
p0 = p0.next;
}
ListNode cur = p0.next, pre = null;
// 执行反转
for (int i = 0; i < right - left + 1; i++) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
// 反转完之后,cur 指向需要反转部分的下一个节点
// pre指向需要反转部分的最后一个节点
// 此时 p0.next 还和原来一样,指向未反转时需要反转的第一个节点
p0.next.next = cur;
p0.next = pre;
// 返回哑节点的下一个节点,即头节点
return dummy.next;
}
}