文章目录
题目介绍
题解
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;
}
}
标签:II,p0,ListNode,cur,反转,next,链表,力扣,节点
From: https://blog.csdn.net/qq_51352130/article/details/142500494