生产企业做网站有用吗,做公众号编辑用什么网站,租号网站怎么做的,如何制作图片配文字题目
给你单链表的头指针 head 和两个整数 left 和 right #xff0c;其中 left right 。请你反转从位置 left 到位置 right 的链表节点#xff0c;返回 反转后的链表 。
示例 1#xff1a; 输入#xff1a;head [1,2,3,4,5], left 2, right 4 输出#xff1a;[…题目
给你单链表的头指针 head 和两个整数 left 和 right 其中 left right 。请你反转从位置 left 到位置 right 的链表节点返回 反转后的链表 。
示例 1 输入head [1,2,3,4,5], left 2, right 4 输出[1,4,3,2,5] 示例 2
输入head [5], left 1, right 1 输出[5]
提示
链表中节点数目为 n 1 n 500 -500 Node.val 500 1 left right n
进阶 你可以使用一趟扫描完成反转吗 题解
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {// 因为头节点有可能发生变化使用虚拟头节点可以避免复杂的分类讨论ListNode dummyNode new ListNode(-1);dummyNode.next head;ListNode pre dummyNode;// 第 1 步从虚拟头节点走 left - 1 步来到 left 节点的前一个节点// 建议写在 for 循环里语义清晰for (int i 0; i left - 1; i) {pre pre.next;}// 第 2 步从 pre 再走 right - left 1 步来到 right 节点ListNode rightNode pre;for (int i 0; i right - left 1; i) {rightNode rightNode.next;}// 第 3 步切断出一个子链表截取链表ListNode leftNode pre.next;ListNode curr rightNode.next;// 注意切断链接pre.next null;rightNode.next null;// 第 4 步同第 206 题反转链表的子区间reverseLinkedList(leftNode);// 第 5 步接回到原来的链表中pre.next rightNode;leftNode.next curr;return dummyNode.next;}private void reverseLinkedList(ListNode head) {// 也可以使用递归反转一个链表ListNode pre null;ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next pre;pre cur;cur next;}}
}
来自力扣官方题解